如何使用获取属性显示名称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()
has an overload https://msdn.microsoft.com/en-us/library/system.web.mvc.html.displaynameextensions.displaynamefor(v=vs.118).aspx#M:System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor%60%602%28System.Web.Mvc.HtmlHelper%7BSystem.Collections.Generic.IEnumerable%7B%60%600%7D%7D,System.Linq.Expressions.Expression%7BSystem.Func%7B%60%600,%60%601%7D%7D%29接受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>
即使集合不包含任何项目,它也会起作用。
旁注:在某些情况下,您最初可能会遇到剃刀错误,但您可以忽略它。一旦运行该应用程序,该错误就会消失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)