我在ASP.NET MVC4网络应用程序中有部分视图。它只是一个局部视图,用于显示一个表,给定一组实体。它看起来像这样:
@model ICollection<Portal.Models.Matter>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Last Accessed</th>
<th>Client</th>
</tr>
</thead>
<tbody>
@if (Model.Count > 0)
{
@Html.DisplayForModel()
}
else
{
<tr>
<td colspan="3" class="text-muted text-centered">There are no Matters to display.</td>
</tr>
}
</tbody>
</table>
我有一个Matter
的DisplayTemplate,它静态地输入到单个Matter
实体,它处理每个表行的渲染。
出于某种原因,当渲染此部分时,不是使用Matter
DisplayTemplate,而是显示以下内容:
System.Collections.Generic.List`1[Portal.Models.Account]System.Collections.Generic.List`1[Portal.Models.Account]
现在,这个部分甚至没有绑定到Account
个实体的集合。它绑定到Matter
个实体的集合。那么,为什么@Html.DisplayForModel()
会尝试显示Account
s的集合呢?在运行时,使用调试器,我可以看到Model
实际上是Matter
个实体的集合,而不是Account
。
我使用以下代码渲染此部分:
@Html.Partial("~/Views/Matter/_Table.cshtml", Model.Client.Matters, new ViewDataDictionary())
答案 0 :(得分:0)
我发现了一个解决方案,或者解决方案,不确定。无论如何,我不是在DisplayForModel
上使用ICollection
,而是迭代集合并在每个元素上使用DisplayFor
。
例如......
@model ICollection<Foo>
for (var item in Model)
{
@Html.DisplayFor(m => item)
}
我想没有任何事情迫使您在m
中使用DisplayFor
之外的属性。