繁体   English   中英

DisplayNameFor a Model 子集合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM