2012-03-21 11 views
0

私はシンプルな製品リストを持っています。製品は2つの異なるカテゴリに分類され、それぞれのカテゴリIDによってページ上の表示方法が異なります。C#MVC 3 Razor - DisplayTemplateを使用してDisplayTemplateを呼び出します。

同じModelタイプのDisplayTemplatesをネストすることは、すべて可能ですか。

//DisplayTemplates/Product.cshtml 
@model MyNameSpace.Product 


@if (Model.CategoryId == (int)ASixthSenseCore.CategoryId.GiftCards) 
{ 
    @Html.DisplayForModel("GiftCards") 
} 
else 
{ 
    @Html.DisplayForModel("Merchandise") 
} 



//DisplayTemplates/GiftCards.cshtml 
@model MyNameSpace.Product 

<div>I am a Gift Card</div> 


//DisplayTemplates/Merchandise.cshtml 
@model MyNameSpace.Product 

<div>I am Merchandise</div> 


//My View 
@mode List<MyNameSpace.Product> 

@Html.DisplayForModel() 

期待通りに商品テンプレートを実行すると、私はこれをやってみました、それは壊れませんが、それはどちらか動作しません - 私は正確に対応する各項目に出力し、いくつかのデバッグテキストを追加しました製品リスト私はTemplate Engineに何らかのブロッキング条項があると思われます。それは、それが消滅するのを避けるために、同じシナリオの可能性がある同じテンプレートへの再帰的呼び出しを伴います。 foreachループで繰り返し処理することなくリスト用の複数のDisplayTemplateを処理する方法です。

答えて

1

テンプレートがDisplayeTemplatesフォルダにないと仮定して、コードが正常に動作するはずです。

Productという別々のサブクラスを作成し、それにテンプレートを作成します。これにより、コードがよりきれいに保たれ、ifステートメントをどこにでも置く必要はありません。

+0

おかげでディスプレイ "e"は質問の誤字だけでした。 2番目のテンプレートは表示されませんが、私はサブクラスのアイテムを考えたことはありません - これは非常にきちんとしたソリューションです、ありがとう! – Rob

+0

typo:それは私が思ったことです。コレクションをループするだけでは、 'DisplayTemplates/Product.cshtml'は必要ありません。 MVCは 'IEnumerable 'に異なるサブクラスを渡しても適切なテンプレートを使います。 –

関連する問題