我很惊讶下表为何能正确找到名称。
@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>
直到将视图模型更改为
之前,我从来没有注意到public class IndexVm
{
public IEnumerable<Member> Members { get; set; }
}
并试图
<th>
@Html.DisplayNameFor(model => model.Members.LastName)
</th>
这停止了工作,当我进行调查时,我意识到我可以理解为什么。不过,我不知道它如何工作……
如果列表为空,计算机应该如何知道显示什么?
@ Html.DisplayNameFor(model => model.Members.FirstOrDefault()?. LastName)
好困惑...
答案 0 :(得分:2)
DisplayNameFor
显示属性的名称或在属性的显示属性中定义的字符串。对于
@Html.DisplayNameFor(model => model.LastName)
,因为在lambda表达式中model
的类型为Member
而不是IEnumerable<Member>
,所以它起作用。
您可以使用
@Html.DisplayNameFor(model => model.Members.FirstOrDefault().LastName)
即使FirstOrDefault()
返回null也仍然有效,因为它内部使用了lambda表达式中的元数据,因此LastName
属性本身未被访问。
如果“成员”在列表IList<Member>
中,则您也可以使用成员[0]
@Html.DisplayNameFor(model => model.Members[0].LastName)