IEnumerable的MVC3编辑器模板不会在@ Html.LabelFor中生成'for'属性

时间:2011-08-02 16:12:00

标签: c# asp.net-mvc-3 html-helper mvc-editor-templates

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

在我看来,我的模型是IEnumerable<ViewModel>,但当我在@Html.EditorForModel()生成的HTML for属性中调用label标记为空时。

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

public class StateViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

EditorTemplate:

@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 IEnumerable<Mcs.Sibs.UI.Web.Models.StateViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorForModel()
}

生成的HTML看起来像这样(对于一个复选框):

<input type="hidden" value="1" name="[0].Id" data-val-required="The Id field is    required." data-val-number="The field Id must be a number." data-val="true">
<div>
<input type="checkbox" value="true" name="[0].Checked" data-val-required="The Checked   field is required." data-val="true">
<input type="hidden" value="false" name="[0].Checked">
<label for="">Checkbox label</label>

您可以看到'for'属性为空。 我做错了什么,或者这是EditorTemplate MVC3默认IEnumerable<T>中的某种错误?

2 个答案:

答案 0 :(得分:1)

试试这个:

@Html.EditorFor(model => model)

答案 1 :(得分:0)

我也有这个问题,经过大约一个小时的非工作解决方案后,我解决了使用额外的ViewModel来包装IEnumerable集合。

请尝试以下代码:

public class MyViewModel
{
    public List<StateViewModel> StateViewModels { get; set; }
}

然后,在您看来:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.MyViewModel>
@using (Html.BeginForm()
{    
    @Html.EditorFor(m => m.StateViewModels)
}

将正确生成id和for属性 当然,您可以根据命名约定调整模型的名称:)