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

发布于 2024-11-27 16:14:32 字数 1428 浏览 1 评论 0原文

我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我是男神闪亮亮 2024-12-04 16:14:32

试试这个:

@Html.EditorFor(model => model)

Try this:

@Html.EditorFor(model => model)
终陌 2024-12-04 16:14:32

我也遇到了这个问题,经过大约一个小时的非工作解决方案后,我使用额外的 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 属性将被正确生成。
当然,您可以根据您的命名约定调整模型的名称:)

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:

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

Then, in your view:

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

The id and for attributes will be correctly generated.
Of course you can adapt the names of the models to your naming conventions :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文