MVC Razor显示模板

时间:2013-10-24 14:13:14

标签: asp.net-mvc asp.net-mvc-4 display-templates

我有一个我传递给视图的项目列表。我想使用显示模板渲染每个项目。但是,有些东西是错的,因为我没有正确渲染场。 这是我的主要观点(Index.cshtml):

@model IEnumerable<CustomEntity>

@{
    ViewBag.Title = "Index";
}
@Html.DisplayFor(m=>m) 

这是我的展示模板:

@model CustomEntity
<div>
    @Html.LabelFor(m=>m.Name):
    <strong>@Model.Name</strong>
    @Html.LabelFor(m=>m.Icon):
    <strong>@Model.Icon</strong>
    @Html.LabelFor(m=>m.TypeName):
    <strong>@Model.TypeName</strong>
</div>

页面加载,但不显示实体的值。

2 个答案:

答案 0 :(得分:6)

@model IEnumerable<CustomEntity>

@{
    ViewBag.Title = "Index";
}
@Html.DisplayForModel()

然后确保您的显示模板存储在~/Views/Shared/DisplayTemplates/CustomEntity.cshtml中。请注意,显示模板的位置和名称非常重要。它应该与类型(CustomEntity.cshtml)一样调用,并且应该位于~/Views/Shared/DisplayTemplates中,或者您也可以在~/Views/XXX/DisplayTemplates中覆盖它,其中XXX是控制器呈现主视图。

答案 1 :(得分:0)

您在Html.DisplayFor类型IEnumerable<CustomEntity>中传递的数据,但您的DisplayTemplate需要CustomEntity。试试这个:

@model IEnumerable<CustomEntity>

@{
    ViewBag.Title = "Index";
}

@foreach(var customEntity in Model)
{
    @Html.DisplayFor(m => customEntity);
}