Asp.net mvc MVC剃须刀显示模板

Asp.net mvc MVC剃须刀显示模板,asp.net-mvc,asp.net-mvc-4,display-templates,Asp.net Mvc,Asp.net Mvc 4,Display Templates,我有一个要传递给视图的项目列表。我想使用显示模板渲染每个项目。但是,有些地方不对劲,因为我没有正确渲染字段。 这是我的主视图(Index.cshtml): @model IEnumerable @{ ViewBag.Title=“Index”; } @DisplayFor(m=>m) 这是我的显示模板: @model CustomEntity <div> @Html.LabelFor(m=>m.Name): <strong>@Model.Name&

我有一个要传递给视图的项目列表。我想使用显示模板渲染每个项目。但是,有些地方不对劲,因为我没有正确渲染字段。 这是我的主视图(Index.cshtml):

@model IEnumerable
@{
ViewBag.Title=“Index”;
}
@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>
@model自定义实体
@Html.LabelFor(m=>m.Name):
@Model.Name
@Html.LabelFor(m=>m.Icon):
@Model.Icon
@Html.LabelFor(m=>m.TypeName):
@Model.TypeName
页面将加载,但不显示实体的值。

@model IEnumerable
@model IEnumerable<CustomEntity>

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

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

您在
类型的
Html.DisplayFor
中传递的数据,但是您的DisplayTemplate需要一个
自定义实体
。请尝试以下方法:

@model IEnumerable<CustomEntity>

@{
    ViewBag.Title = "Index";
}

@foreach(var customEntity in Model)
{
    @Html.DisplayFor(m => customEntity);
}
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
@foreach(模型中的var customEntity)
{
@DisplayFor(m=>customEntity);
}

它会不会搜索一个以
IEnumerable
为模型的显示模板,而不是
CustomEntity
?谢谢Darin!我缺少显示模板的正确名称。它被称为实体,而不是CustomEntity。一旦我改了名字,它就开始工作了。你能告诉我@Html.DisplayForModel()和@Html.DisplayFor(m=>m)之间的区别吗?@RédaMattar,不,当您将
IEnumerable
作为属性传递给显示或编辑器模板时,它将查找名为
TModel.cshtml
的模板,并将自动为此集合的每个元素调用它,这样您就不必在代码中编写任何
foreach
循环。这一切都是按惯例进行的。@laconicdev,在
@Html.DisplayForModel()
@Html.DisplayFor(m=>m)
之间没有区别。只是在这种情况下,
@Html.DisplayForModel()
看起来更自然。不需要foreach循环。MVC按照惯例处理它,只要其他一切都是正确的。
@model IEnumerable<CustomEntity>

@{
    ViewBag.Title = "Index";
}

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