Mar*_*ark 22 c# asp.net asp.net-mvc
如何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; }
}
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历嵌套项,如下所示:
@foreach (var item in Model.InvoiceItems)
{
@Html.DisplayFor(modelItem => item.Item)
<br />
@Html.DisplayFor(modelItem => item.Description)
<br />
}
Run Code Online (Sandbox Code Playgroud)
但我怎么去: [Display(Name = "Item Heading")]
@Html.DisplayNameFor(modelItem => modelItem.Item)
Run Code Online (Sandbox Code Playgroud)
我收到错误: '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
谢谢,马克
Dav*_*vid 35
在这里,您将访问item
循环:
@Html.DisplayFor(modelItem => item.Item)
Run Code Online (Sandbox Code Playgroud)
但在这里你不是:
@Html.DisplayNameFor(modelItem => modelItem.Item)
Run Code Online (Sandbox Code Playgroud)
将后者更改为此,它应该工作:
@Html.DisplayNameFor(modelItem => item.Item)
Run Code Online (Sandbox Code Playgroud)
modelItem
是类型Invoice
(传递给视图的模型),但是在循环中你想要使用item
(来自循环迭代器)类型InvoiceItem
.
附注:调试这样的事情可能是很多,如果更直接的一切并没有所谓的"项目".明确命名很重要:)
编辑:如果您在循环外访问它,则需要手动深入查看模型.像这样的东西:
@Html.DisplayNameFor(modelItem => modelItem.InvoiceItems.First().Item)
Run Code Online (Sandbox Code Playgroud)
这感觉就像这将是危险的,因为.First()
如果没有项目可以抛出异常.但是,正如评论已经指出并且一些粗略的谷歌似乎证实,在这种情况下实际上.First()
并没有在运行时执行.这只是一点点诡计,允许反映到该属性..DisplayNameFor()
归档时间: |
|
查看次数: |
9477 次 |
最近记录: |