如何访问嵌套模型中的DisplayNameFor
-即:
public class Invoice
{
public int InvoiceId { get; set; }
public string CustomerName { get; set; }
public string Contact { get; set; }
public IList<InvoiceItem> InvoiceItems { get; set; }
}
public class InvoiceItem
{
public int InvoiceItemId { get; set; }
public int InvoiceId { get; set; }
[Display(Name = "Item Heading")]
public string Item { get; set; }
[Display(Name = "Item Description")]
public string Description { get; set; }
public virtual Invoice Invoice { get; set; }
}
我可以循环遍历嵌套项,如下所示:
@foreach (var item in Model.InvoiceItems)
{
@Html.DisplayFor(modelItem => item.Item)
<br />
@Html.DisplayFor(modelItem => item.Description)
<br />
}
但是我怎么去:[Display(Name = "Item Heading")]
@Html.DisplayNameFor(modelItem => modelItem.Item)
我得到了错误:'inv5.Models.Invoice' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'inv5.Models.Invoice' could be found
谢谢,马克
发布于 2013-05-22 21:54:52
你可以为你的InvoiceItems
创建一个DisplayTemplate,比如"InvoiceItemHeader":
@model IEnumerable<InvoiceItem>
@Html.DisplayNameFor(m => m.Item)
<br />
@Html.DisplayNameFor(m => m.Description)
模型的类型必须是IEnumerable<T>
,因为DisplayNameFor Method具有此类型的重载版本。
然后,您可以在视图中显示模板:
@Html.DisplayFor(m => m.InvoiceItems, "InvoiceItemHeader")
@foreach (var item in Model.InvoiceItems)
{
@Html.DisplayFor(modelItem => item.Item)
<br />
@Html.DisplayFor(modelItem => item.Description)
<br />
}
发布于 2013-05-22 22:02:47
我还没有试过这个,但它应该可以工作。
@Html.DisplayNameFor(modelItem => modelItem.First().InvoiceItems().First().Item)
DisplayNameFor扩展方法只不过是一个需要具有以下签名的成员表达式的方法:Expression<Func<TModel, TValue>> expression
https://stackoverflow.com/questions/16692794
复制相似问题