我有一个简单的产品列表,产品分为两个不同的类别,并根据其类别ID在页面上以不同的方式显示。
是否可以嵌套相同模型类型的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()
我已经尝试过这样做并且没有中断,但它也不起作用,产品模板按预期运行 - 我添加了一些调试文本,它们正确地输出产品列表中的每个相应项目。我怀疑模板引擎中存在某种阻塞条款,以避免它消失在它自己的背后,对同一模板的递归调用是这种情况的可能性,说过我想我会问,因为这将是一个方便处理列表的多个DisplayTemplates的方法,而不必使用foreach循环迭代它们。
答案 0 :(得分:1)
假设您的模板不在DisplayeTemplates
文件夹中,您的代码应该可以使用。
我会创建Product
的单独子类并为它们创建模板。这将使代码更清晰,您不必在任何地方放置if
语句。