@model中的强类型助手IEnumerable<>

时间:2013-05-19 22:43:18

标签: c# asp.net-mvc asp.net-mvc-4 razor

为什么我无法在下面的代码中使用强类型助手?

@using ISApplication.Models
@model IEnumerable<PersonInformation>

@foreach (PersonInformation item in Model)
{
    @Html.LabelFor(model => model.Name) // Error here.
    @item.Name // But this line is ok

    @* and so on... *@
}

错误消息是

The type of arguments for method '...LabelFor<>... ' cannot be inferred from the usage. Try specifying the type arguments explicitly.

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:8)

试试这种方式。您需要从项目中访问名称。

@foreach (PersonInformation item in Model)
{
    @Html.LabelFor(x => item.Name); 
    @Html.DisplayFor(x =>item.Name)

}

答案 1 :(得分:4)

我想我知道你想做什么。

首先,您在lambda表达式中使用的模型参数似乎是razor reserved word - 这就是导致类型错误的原因。

其次,为了解决你的可枚举问题,要获得标签和值,你将不得不使用IEnumerable中值的索引

例如:

@using ISApplication.Models
@model IEnumerable<PersonInformation>
@
{
  List<PersonalInformation> people = Model.ToList();
  int i = 0;
}
@foreach (PersonInformation item in people)
{
    @Html.LabelFor(m => people[i].Name) // Error here.
    @Html.DisplayFor(m => people[i].Name) // But this line is ok

    @* and so on... *@
    i++;
}

编辑:

这个方法只有一个for循环,因为目前不需要枚举集合

@using ISApplication.Models
@model IEnumerable<PersonInformation>
@
{
  List<PersonalInformation> people = Model.ToList();
}
@for(int i = 0; i < people.Count; i++)
{
    @Html.LabelFor(m => people[i].Name) // Error here.
    @Html.DisplayFor(m => people[i].Name) // But this line is ok

    @* and so on... *@
}