IEnumerable 的 MVC3 编辑器模板不会生成“for” @Html.LabelFor 中的属性
我的 ViewModel
类有自定义的 EditorTemplate(它生成一个复选框列表)。
在视图中,我的模型是 IEnumerable
,但是当我在 的生成的 HTML
标签为空。for
属性中调用 @Html.EditorForModel()
时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”属性为空。 我是否做错了什么,或者这是 IEnumerable
的 MVC3 默认 EditorTemplate
中的某种错误?
I have custom EditorTemplate for my ViewModel
class (it generates a checkbox list).
In view my model is IEnumerable<ViewModel>
, but when I call @Html.EditorForModel()
in generated HTML for
attribute of label
tag is empty.
Everything works fine when I want to render only one checkbox.
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>
My View:
@model IEnumerable<Mcs.Sibs.UI.Web.Models.StateViewModel>
@using (Html.BeginForm()
{
@Html.EditorForModel()
}
Generated HTML looks like this (for one checkbox):
<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>
You can see that 'for' attribute is empty.
Am I doing something wrong or this is some kind of bug in MVC3 default EditorTemplate
for IEnumerable<T>
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
Try this:
我也遇到了这个问题,经过大约一个小时的非工作解决方案后,我使用额外的 ViewModel 来包装 IEnumerable 集合解决了这个问题。
请尝试以下代码:
那么,在您看来:
id 和 for 属性将被正确生成。
当然,您可以根据您的命名约定调整模型的名称:)
I had this problem too and after about an hour of non-working solutions I solved using an additional ViewModel to wrap the IEnumerable collection.
Please try the following code:
Then, in your view:
The id and for attributes will be correctly generated.
Of course you can adapt the names of the models to your naming conventions :)