2011-12-10 2 views
2

다른 유형의 "혜택"그룹이 있지만 모두 BaseBenefit 클래스에서 상속됩니다. 그런 다음 List<BaseBenefit>이보기에 사용됩니다. 그들을 선물하기 위해 여기에서 가장 좋은 방법은 무엇입니까?MVC에서 상속을 포함하는 모델을 표시

하지만 캐스팅의 경우보기에 if가 있지만 "stupid IU"의 규칙을 어기는 것처럼 보입니다. 나는 각각의 이익을위한 속성을 포함 할 수 있지만 실제 유형은 enum이 될 것입니다. 그렇지만 어느 것이 적절한지를 확인해야합니다.

아이디어가 있으십니까?

답변

5

디스플레이 템플릿을 사용할 수 있습니다. 기본보기에 따라서 : Benefits 유형 List<BaseBenefit>의 뷰 모델에 속성을 것입니다

@Html.DisplayFor(x => x.Benefits) 

. 이제 당신이해야 할 다른 가능한 유형의 표시 템플릿을 정의하는 것입니다 :

~/Views/Shared/DisplayTemplates/SpecificBenefit1.cshtml :

@model SpecificBenefit1 
... 

~/Views/Shared/DisplayTemplates/SpecificBenefit2.cshtml : 디스플레이 템플릿의

@model SpecificBenefit2 
... 

위치와 이름이 중요합니다. ~/Views/Shared/DisplayTemplates 폴더에 있어야하며, 컨트롤러간에 다시 사용하지 않을 경우 ~/Views/SomeController/DisplayTemplates 폴더에서도 정의 할 수 있습니다. 템플리트의 이름은 목록의 요소 유형과 동일해야합니다.

열거 형 속성의 주보기에서 DisplayFor를 사용하면 ASP.NET MVC는이 목록의 각 요소에 대해 해당하는 표시 템플릿을 자동으로 호출합니다.

+0

그래서 뷰가 기본 유형을 얻더라도 실제 유형을 사용합니까? –

+0

캐스팅하지 않습니까? –

+0

@GuyZ, 예, ASP.NET MVC는 런타임 유형을 사용하여 적절한 표시/편집기 템플릿을 선택합니다. –

관련 문제