9

我有一个复杂类型的模型,即用户/地址/地址列表

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 的正确方法是什么?

蒂亚杰

4

6 回答 6

12

我变了

@Html.DisplayNameFor(m => Model.Addresses.Street)

@Html.DisplayNameFor(m => Model.Addresses.FirstOrDefault().Street)

不要使用@Html.DisplayNameFor(m => Model.Addresses[0].Street),因为如果您需要编辑第一行,您将无法使用这种方式。

现在一切都按预期工作。

于 2012-08-29T17:46:00.910 回答
1

您还可以使用 Linq 来避免索引错误。我用这是我的代码 -

@Html.DisplayNameFor(m => Model.Addresses.first().Street)

以下错误消失了。

Cannot apply indexing with [] to an expression of type 'System.Data.Objects.DataClasses.EntityCollection<Address>

但是最好使用以下语句直接使用名称

@Html.DisplayName("Street")
于 2014-11-04T14:36:26.970 回答
1

这可能会更好:

@Html.DisplayNameFor(m => Model.Addresses.FirstOrDefault().Street)

如果列表为空,也可以使用

于 2015-04-22T14:30:57.170 回答
0

要显示地址属性的名称,您可以定义一个空Adress模型

{
  var adress =new Models.Address();
}

并像这样使用它

 @Html.DisplayNameFor(m => adress.Street)
于 2015-04-22T14:44:33.167 回答
0

在 ASP.NET Core 中,Html.DisplayNameForInnerType()可以改用:

@Html.DisplayNameForInnerType((Address address) => address.Street)

但是,您需要明确指定 lambda 表达式参数的类型 ( Address address)。

于 2022-01-23T16:13:15.170 回答
-1

你使用的DisplayNameFor方式不对。Addresses是一个列表,它没有像Street, City, . 这样的属性State。因此,您希望如何显示名称。

在这种情况下,直接使用视图中的名称而不是使用 helper 不是那么简单。

于 2012-08-29T14:24:38.283 回答