如何使用DisplayNameFor()获取属性显示名称以构建表头。例如:

   @model IEnumerable<Item>
   <table class="table">
        <thead>
            <tr>
                <td>@Html.DisplayNameFor(? => ?.prop1)</td>
                <td>@Html.DisplayNameFor(? => ?.prop2)</td>
                <td>@Html.DisplayNameFor(? => ?.prop3)</td>
            </tr>
        </thead>
        <tbody>
            @foreach (Item item in Model) {
                <tr>
                    <td>@Html.DisplayFor(i => item.prop1)</td>
                    <td>@Html.DisplayFor(i => item.prop2)</td>
                    <td>@Html.DisplayFor(i => item.prop3)</td>
                </tr>
            }
        </tbody>
    </table>

问号里应该写什么?

最佳答案

DisplayNameFor() 有一个 overload 接受 IEnumerable<T> 所以它只需要是

<td>@Html.DisplayNameFor(m => m.prop1)</td>

请注意,这仅适用于模型为 Enumerable<T> (在您的情况下为 @model IEnumerable<Item> )的情况。

但如果模型是一个包含 IEnumerable<T> 属性的对象,它将不起作用。

例如,以下将不起作用
<td>@Html.DisplayNameFor(m => m.MyCollection.prop1)</td>

它需要是
<td>@Html.DisplayNameFor(m => m.MyCollection.FirstOrDefault().prop1)</td>

即使集合不包含任何项目,这也将起作用。

旁注:在某些情况下,您最初可能会收到 Razor 错误,但您可以忽略它。运行该应用程序后,该错误将消失。

关于c# - ASP.NET MVC。如何使用 DisplayNameFor 来创建表格标题和正文?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39029941/

10-14 08:35