C# IEnumerable的MVC3编辑器模板';t生成';对于';@Html.LabelFor中的属性

C# IEnumerable的MVC3编辑器模板';t生成';对于';@Html.LabelFor中的属性,c#,asp.net-mvc-3,html-helper,mvc-editor-templates,C#,Asp.net Mvc 3,Html Helper,Mvc Editor Templates,我为我的ViewModel类定制了EditorTemplate(它会生成一个复选框列表) 在视图中,我的模型是IEnumerable,但当我在为标签的属性调用@Html.EditorForModel()生成的Html中时,标签的属性为空 当我只想渲染一个复选框时,一切正常 public class StateViewModel { public int Id { get; set; } public string Name { get; set; } public boo

我为我的
ViewModel
类定制了EditorTemplate(它会生成一个复选框列表)

在视图中,我的模型是
IEnumerable
,但当我在为
标签的
属性调用
@Html.EditorForModel()
生成的Html
中时,标签的
属性为空

当我只想渲染一个复选框时,一切正常

public class StateViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}
编辑模板:

@model Mcs.Sibs.UI.Web.Models.StateViewModel

@Html.HiddenFor(x => x.Id)
<div>
    @Html.CheckBoxFor(x => x.Checked)
    @Html.LabelFor(x => x.Checked, Model.Name)
</div>
@model Mcs.Sibs.UI.Web.Models.StateViewModel
@Html.HiddenFor(x=>x.Id)
@Html.CheckBoxFor(x=>x.Checked)
@LabelFor(x=>x.Checked,Model.Name)
我的看法是:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.StateViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorForModel()
}
@model IEnumerable
@使用(Html.BeginForm()
{    
@Html.EditorForModel()
}
生成的HTML如下所示(对于一个复选框):


复选框标签
您可以看到“for”属性为空。 是我做错了什么,还是这是MVC3中的某种错误,对于
IEnumerable

尝试以下方法:

@Html.EditorFor(model => model)

我也遇到了这个问题,在大约一个小时的非工作解决方案之后,我使用附加的ViewModel来包装IEnumerable集合,从而解决了这个问题

请尝试以下代码:

public class MyViewModel
{
    public List<StateViewModel> StateViewModels { get; set; }
}
公共类MyViewModel
{
公共列表StateViewModels{get;set;}
}
那么,在你看来:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.MyViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorFor(m => m.StateViewModels)
}
@model IEnumerable
@使用(Html.BeginForm()
{    
@EditorFor(m=>m.StateViewModels)
}
将正确生成id和for属性。

当然,您可以根据您的命名约定调整模型的名称:)

Hmm这很奇怪。我想你也尝试过在没有第二个参数的情况下调用LabelFor吗?@John-是的,我尝试过在没有第二个参数的情况下调用LabelFor,仍然为空。是的……我迫不及待地想知道答案是什么。你是否尝试过在IEnumerable上循环,然后在Html.EditorFor(model=>model[I])?这将生成“for”属性,但“name”属性将不会出现在表单“[0]”中。选中了“发布表单数据时,模型绑定器无法绑定IEnumerable参数。
@model IEnumerable<Mcs.Sibs.UI.Web.Models.MyViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorFor(m => m.StateViewModels)
}