2011-12-10 3 views
2

私は異なるタイプの「利点」グループを持っていますが、すべてBaseBenefitクラスから継承しています。その場合、List<BaseBenefit>がビューで使用されます。それらを提示するためにここで何がベストプラクティスですか?MVCで継承を含むモデルをビューに表示

私はキャスティングをしていますが、ビュー内にifがありますが、それは "愚かな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はランタイムタイプを使用して適切な表示/エディタテンプレートを選択します。 –

関連する問題