[英]DisplayNameFor a Model child collection
假设我有
class Item {
string Name {get; set;}
int Type {get; set;}
}
如果我将 model 作为项目集合,则编译如下:
@model IEnumerable<Item>
@Html.DisplayNameFor(model => model.Name)
现在假设我已经改为这个
class MyItems {
int Type {get; set;}
IEnumerable<Item> Items {get; set;}
}
这不再编译
@model MyItems
@Html.DisplayNameFor(model => model.Items.Name) // NOK
错误 CS1061“
IEnumerable<Item>
”不包含“Name”的定义,并且找不到接受“IEnumerable<Item>
”类型的第一个参数的可访问扩展方法“Name”(您是否缺少 using 指令或程序集参考?)
我试过了
@Html.DisplayNameFor(model => Model.Items.Name) // _M_odel, NOK
为什么当我们有一个IEnumerable
时代码在第一种情况下工作,而不是在我们有相同IEnumerable
的第二种情况下工作?
第一个有效,因为 model 本身是IEnumerable
类型,而后者是主 model 的属性,它是IEnumerable
该错误非常具有自我描述性, Items
属性是Item
的集合,因此您需要对其进行循环或 select 其中一个像:
@Html.DisplayNameFor(model => model.Items.First().Name)
或喜欢:
@{
var item = model.Items.First();
}
@Html.DisplayNameFor(model => item.Name)
但是如果Items
集合是 null 或为空, First()
将抛出异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.