我有一个复杂类型的模型,即用户/地址/地址列表
public class User{
public List<Address> Addresses{get;set;}
}
在我的视图中我正在显示此
<fieldset><legend>@Html.DisplayNameFor(model=>model.Addresses)</legend>
<table>
<tr>
<th>
@Html.DisplayNameFor(m => Model.Addresses.Street)
</th>
<th>
@Html.DisplayNameFor(model => model.Addresses.City)
</th>
<th>
@Html.DisplayNameFor(model => model.Addresses.State)
</th>
</tr>
@foreach (var item in Model.Addresses) {
<tr>
<td>
@Html.DisplayFor(m => item.Street)
</td>
<td>
@Html.DisplayFor(m => item.City)
</td>
<td>
@Html.DisplayFor(m => item.State)
</td>
</tr>
}
</table></fieldset>
DisplayNameFor Street / City / State不起作用。
在子对象上获取DisplayNameFor的正确方法是什么?
TIA Ĵ
答案 0 :(得分:10)
我改变了
@Html.DisplayNameFor(m => Model.Addresses.Street)
到
@Html.DisplayNameFor(m => Model.Addresses.FirstOrDefault().Street)
请勿使用@Html.DisplayNameFor(m => Model.Addresses[0].Street)
,因为如果您需要编辑第一行,则无法通过这种方式进行编辑。
现在一切正常。
答案 1 :(得分:1)
您也可以使用Linq来避免索引错误。我用这是我的代码 -
@Html.DisplayNameFor(m => Model.Addresses.first().Street)
以下错误消失了。
Cannot apply indexing with [] to an expression of type 'System.Data.Objects.DataClasses.EntityCollection<Address>
然而,最好使用以下语句直接使用Name
@Html.DisplayName("Street")
答案 2 :(得分:1)
这可能更好:
@Html.DisplayNameFor(m => Model.Addresses.FirstOrDefault().Street)
如果列表为空,也会起作用
答案 3 :(得分:0)
您使用DisplayNameFor
的方式是错误的。 Addresses
是一个列表,它没有Street
,City
,State
等属性。所以你希望如何显示这个名字。
在这种情况下,不是直接使用视图中的名称而不是使用帮助器。