我很惊讶为什么下表正确地找到了名字。
@model IEnumerable<Member>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<tr>
...
我设置的模型是一个类型为Member的数组,因此模型没有属性LastName。列表中的元素确实存在!不应该
<th>
@Html.DisplayNameFor(model => model.First().LastName)
</th>
在我将viewmodel改为之前,我从未注意到这一点
public class IndexVm
{
public IEnumerable<Member> Members { get; set; }
}
并试图
<th>
@Html.DisplayNameFor(model => model.Members.LastName)
</th>
这停止了工作,当我调查时,我意识到我可以理解为什么。我无法理解它之前是如何工作的,不过......
如此迷茫...
DisplayNameFor
显示属性的名称或属性的display属性中定义的字符串
@Html.DisplayNameFor(model => model.LastName)
,它起作用,因为model
在lambda表达式中有一种Member
而不是IEnumerable<Member>
。
你可以用
@Html.DisplayNameFor(model => model.Members.FirstOrDefault().LastName)
这仍然有效,即使FirstOrDefault()
将返回null,因为它在内部使用来自lambda表达式的元数据,因此不会访问LastName
属性本身。
如果成员列出IList<Member>
,你也可以使用成员[0]
@Html.DisplayNameFor(model => model.Members[0].LastName)