2

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

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

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

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 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”属性为空。我做错了什么还是这是 MVC3 默认EditorTemplate的某种错误IEnumerable<T>

4

2 回答 2

1

尝试这个:

@Html.EditorFor(model => model)
于 2011-08-02T16:19:19.557 回答
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 属性。
当然,您可以根据您的命名约定调整模型的名称:)

于 2013-01-12T22:22:12.743 回答