0

我有一个简单的产品列表,产品分为两个不同的类别,并根据其类别 ID 在页面上显示不同。

是否可以嵌套相同模型类型的 DisplayTemplate,例如

//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()

我试过这样做,它没有中断,但它也不起作用,产品模板按预期运行 - 我添加了一些调试文本,可以正确输出产品列表中的每个相应项目。我怀疑模板引擎中有某种阻塞子句,以避免它消失在它自己的背面,递归调用同一模板是这种情况的可能性,我说我想我会问,因为这会很方便处理列表的多个 DisplayTemplate 的方法,而无需使用 foreach 循环对其进行迭代。

4

1 回答 1

1

假设您的模板不在DisplayeTemplates文件夹中,您的代码应该可以工作。

我会Product为它们创建单独的子类并创建模板。这将使代码更干净,您不必在if任何地方放置语句。

于 2012-03-21T10:46:32.090 回答