0

在我的 ASP.NET MVC4 Web 应用程序中,我有一个部分视图。它只是一个局部视图,旨在显示一个表格,给定一组实体。它看起来像这样:

@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静态类型为单个Matter实体的 DisplayTemplate,它处理每个表行的呈现。

出于某种原因,当这个部分被渲染时,而不是使用MatterDisplayTemplate 它只显示以下内容:

System.Collections.Generic.List`1[Portal.Models.Account]System.Collections.Generic.List`1[Portal.Models.Account]

现在,这个部分甚至没有绑定到Account实体集合。它绑定到Matter实体集合。那么,为什么@Html.DisplayForModel()要显示Accounts 的集合呢?在运行时,使用调试器,我可以看到Model实际上是Matter实体的集合,而不是Account.

我使用以下代码呈现此部分:

@Html.Partial("~/Views/Matter/_Table.cshtml", Model.Client.Matters, new ViewDataDictionary())
4

1 回答 1

0

我找到了解决方法,或者可能是解决方案,不确定。无论如何,我不是DisplayForModel在 an上使用,而是ICollection遍历集合并DisplayFor在每个元素上使用。

例如 ...

@model ICollection<Foo>

for (var item in Model)
{
    @Html.DisplayFor(m => item)
}

我想没有什么会迫使您使用min的属性DisplayFor

于 2013-10-30T23:32:08.210 回答