Asp.net mvc 3 C#MVC 3 Razor-使用DisplayTemplate调用DisplayTemplate

Asp.net mvc 3 C#MVC 3 Razor-使用DisplayTemplate调用DisplayTemplate,asp.net-mvc-3,razor,display-templates,Asp.net Mvc 3,Razor,Display Templates,我有一个简单的产品列表,产品分为两个不同的类别,并根据其类别id在页面上显示不同 是否可以嵌套相同型号的显示模板,例如 //DisplayTemplates/Product.cshtml @model MyNameSpace.Product @if (Model.CategoryId == (int)ASixthSenseCore.CategoryId.GiftCards) { @Html.DisplayForModel("GiftCards") } else { @Html

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

是否可以嵌套相同型号的显示模板,例如

//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()
//显示模板/Product.cshtml
@模型MyNameSpace.Product
@if(Model.CategoryId==(int)ASixthSenseCore.CategoryId.GiftCards)
{
@Html.DisplayForModel(“GiftCards”)
}
其他的
{
@Html.DisplayForModel(“商品”)
}
//显示模板/GiftCards.cshtml
@模型MyNameSpace.Product
我是一张礼品卡
//DisplayTemplates/products.cshtml
@模型MyNameSpace.Product
我是商品
//我的看法
@模式列表
@Html.DisplayForModel()

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

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


我将为
产品
创建单独的子类,并为它们创建模板。这将保持代码的整洁,并且您不必到处放置
if
语句

谢谢,显示“e”只是问题中的一个输入错误。第二个模板不会显示,但我从来没有想过对这些项目进行子分类-这是一个非常整洁的解决方案,谢谢!我就是这么想的。如果只是在集合中循环,则根本不需要
DisplayTemplates/Product.cshtml
。即使在
IEnumerable
中传递不同的子类,MVC也会使用适当的模板。