我为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>
中的某种错误?
答案 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属性 当然,您可以根据命名约定调整模型的名称:)