2010-06-01 9 views
3

ASP.NET MVC는 다른 모델로부터 상속받은 모델 클래스가있을 때 모델 바인딩을 작동시키는 간단한 방법을 제공합니까?모델 바인딩 및 파생 모델 클래스

제 시나리오에서는보기가 강력하게 List<Person>으로 입력되었습니다.

Person에서 상속하는 클래스가 두 개 있습니다. 즉 PersonTypeOnePersonTypeTwo입니다.

나는이 클래스 이름과 일치하는 이름을 가진 강력한 형식의 부분보기가 있으며 각 모델의 속성에 대한 양식 요소를 렌더링합니다. 이것은 사용자가보다는, 관련 컨트롤러 액션 메소드 그냥 List<Person>을 얻는 형태로 제출하면 그렇다, 잘 작동

<% for(int i = 0; i < Model.Count; i++) 
    { 
     Html.RenderPartial(Model[i].GetType().Name, Model[i]); 
    } %> 

:

내 주요보기에 나는 다음과 같은 코드를 가질 수 있음을 의미 Person, PersonTypeOnePersonTypeTwo의 목록

양식 제출에 PersonTypeOnePersonTypeTwo 클래스의 인스턴스를 만들기 위해 기본 모델 바인더에 알릴 수있는 충분한 정보가 양식에 포함되어 있지 않으므로 예상과 거의 같습니다.

그렇다면 기본 모델 바인더에서 이러한 기능을 사용할 수있는 방법이 있습니까?

답변

4

입력에 바인딩 할 별도 모델을 만들어야합니다. ViewModel과 EditModel은 완전히 다른 책임이므로 자체 객체를 가질 자격이 있습니다.

+0

POST 양식을받는 동작 메서드는 강력한 형식의 뷰에 사용되는 것과 완전히 다른 형식의 인수를 받아 들여야한다고 말하고 있습니까? –

+2

네, 저 말은 절대적입니다. 생각해 보면 렌더링에 사용되는 ViewModel에는 드롭 다운 검색 값, 특히 렌더링을 위해 특별히 포맷 된 텍스트 및 기타 모든 종류의 항목이있을 수 있습니다. 귀하의 행동이 취하는 모델은 실제로 바인딩 될 정확한 특성과 관련성이있는 검증만을 가져야합니다. –