为什么我的静态类型部分视图试图呈现非预期的模型类型?

时间:2013-10-30 17:42:22

标签: asp.net asp.net-mvc razor partial-views

我在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())

1 个答案:

答案 0 :(得分:0)

我发现了一个解决方案,或者解决方案,不确定。无论如何,我不是在DisplayForModel上使用ICollection,而是迭代集合并在每个元素上使用DisplayFor

例如......

@model ICollection<Foo>

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

我想没有任何事情迫使您在m中使用DisplayFor之外的属性。