私はシンプルな製品リストを持っています。製品は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を処理する方法です。
おかげでディスプレイ "e"は質問の誤字だけでした。 2番目のテンプレートは表示されませんが、私はサブクラスのアイテムを考えたことはありません - これは非常にきちんとしたソリューションです、ありがとう! – Rob
typo:それは私が思ったことです。コレクションをループするだけでは、 'DisplayTemplates/Product.cshtml'は必要ありません。 MVCは 'IEnumerable'に異なるサブクラスを渡しても適切なテンプレートを使います。 –