이 프레임 워크가 유쾌하게 필요한 것의 95 %를 어떻게 수행하는지에 대한 이야기지만, 그 마지막 5 %에서는 부끄럽지 않게 싫어합니다. 비표준 말라 키에 참여하기를 원하면 자신의 사업이라고 고맙습니다. 좋은 일을하는 것으로 돌아가고 싶다고 결정하면 여기에 올거예요. 일반적으로 말하자면이 최종 5 퍼센트에는 필수 기능의 일부 버전이 포함될 수밖에 없습니다.ASP.Net MVC 2 : viewmodel을 사용하면 모델 바인딩이 손상됩니다.
데이터 개체를 업데이트하는 강력한 형식의보기가 있습니다. 관용적 인 MVC2 헬퍼를 사용했습니다. 예를 들어 Html.TextBoxFor(model = > model.Name)
입니다. 중첩 된 객체에 Editor 템플릿을 사용했습니다. (백엔드는 Mongo 문서 모음이므로 복잡한 유형을 나타낼 필요가 있습니다.)
그럼 드롭 다운이 필요합니다. 드롭 다운은 조금 까다 롭습니다. 문제는, 내가 대신 직접 item
에 전달하는 뷰 모델을 만들 거 야 : 잘 작동
class itemViewModel
{
...
public Item item { get; set; }
public IEnumerable<SelectListItem> dropdown { get; set; }
}
public ActionResult()
{
return View("Update", new itemViewModel(item, dropdown))
}
은 ... 드롭 다운을 채 웁니다. 그러나! 내 전망을 업데이트해야합니다 :
Html.TextBoxFor(model => model.Name) ->
Html.TextBoxFor(model => model.item.Name)
위대한, 문제 해결. 죄송합니다. 이제 모델 바인딩이 작동하지 않습니다. 디버그하고 Request.Form
값을 살펴보십시오. 오. Name
대신 item.Name
입니다. 말이된다. 대신 업데이트보기에 itemViewModel
이 필요하다고 말하면 바인딩이 작동합니다.
아, 기다리지 마세요. 편집자를 사용하는 중첩 된 객체가 있기 때문입니다. 그들은 유형이 강하고 수신중인 모델이 실제로 뷰 모델의 속성이라는 것을 모릅니다. 따라서 그들은 여전히 item.Address.City
대신 Address.City
을 뱉어 내고 바인딩에 실패합니다.
:
- 는 그것이 속성
- 의 몰라도
item
모델을 얻을 수 있도록 - 은 자체 입력 된 편집기로 전체 빌어 먹을 양식을 넣어 전문 사용자 정의 모델 바인더를 작성 보기 모델을 죽이고 사전을 사용하여 드롭 다운을 해킹하십시오.
HtmlHelpers
을 사용하여 종료하고 전체 양식을 직접 입력하십시오.- 램버스 및 모델 개체를 매개 변수로 사용하여 내
HtmlHelper
확장명을 작성하십시오. - 모든 라벨/필드 그룹을 개별 편집기 템플릿에 넣습니다.
이 모든 것은 과도하거나 슬프다. 뷰 모델은 깨끗하고 유용한 방법 인 것 같습니다. 그 (것)들을 사용하여 나가 다른 지역에서 거칠거나 프레임 워크의 꽤 큰 덩어리에 작은 변이를 재생해야 한 ㄴ다는 것을 의미 하는가? 나는 지난 3 개월 동안 C#을 배웠다. (그래픽 디자이너는 CS 배경이없는 정적 인 타이핑이 무엇인지 알고 싶어했다. 나는 고립되어 일한다. 최고의 사례를 배울 수있는 사람이 없습니다. 나는 그들 중 일부를 배우지 않으면 나는 유지할 수없는 똥 더미로 끝날 것 같은 기분이 든다. 따라서 귀하의 의견은 높이 평가됩니다.
Daniel! –