我很惊讶为什么下表能正确找到名称。
@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>
我从来没有注意到这一点,直到我将 View 模型更改为
public class IndexVm
{
public IEnumerable<Member> Members { get; set; }
}
并尝试
<th>
@Html.DisplayNameFor(model => model.Members.LastName)
</th>
这不再起作用,当我调查时,我意识到我能明白原因。不过,我不明白它以前是如何工作的......
- 有人可以解释一下这是怎么回事吗?
- 以下是我的新 View 模型的唯一选项吗?
如果列表为空,计算机如何知道要显示什么?
@Html.DisplayNameFor(model => model.Members.FirstOrDefault()?.LastName)
很困惑...
最佳答案
DisplayNameFor
显示属性的名称或属性的显示属性中定义的字符串。For
@Html.DisplayNameFor(model => model.LastName)
,它从model
开始工作类型为Member
不是IEnumerable<Member>
在 lambda 表达式中。
你可以使用
@Html.DisplayNameFor(model => model.Members.FirstOrDefault().LastName)
即使 FirstOrDefault()
这仍然有效将返回 null,因为它在内部使用 lambda 表达式中的元数据,LastName
属性本身不被访问。
如果成员在列表中 IList<Member>
,您还可以使用 Members[0]
@Html.DisplayNameFor(model => model.Members[0].LastName)
关于c# - Razor页面如何找到DisplayNameFor中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659117/