C#MVC 3 Razor - 使用DisplayTemplate调用DisplayTemplate

时间:2012-03-21 10:41:56

标签: asp.net-mvc-3 razor display-templates

我有一个简单的产品列表,产品分为两个不同的类别,并根据其类别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循环迭代它们。

1 个答案:

答案 0 :(得分:1)

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

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