MVC复选框分组

本文关键字:复选框 MVC | 更新日期: 2023-09-27 18:18:43

我有一个视图,它需要一些复选框来描述一周中的天数。我想返回给控制器哪些框被选中了。我从各种谷歌搜索中找到了一些帮助,以下是我找到的。

第1部分:

在控制器中:

vm.AllDays = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToList();

In the View:

@foreach (var day in Model.AllDays) {
   <input type="checkbox" name="days" value="@day"/> <label>@day</label><br />
}

然后在post handler中:

[HttpPost]
public ActionResult _AddEdit(SubscriptionDetailsModel vm, IEnumerable<string> days) {
    //etc, etc, etc
}

这是有效的,我从days参数中得到所选的天数。然而,我很好奇,并将复选框上的"name"属性更改为我的模型中我最终希望这些值去的字段。总之,我的视图模型包含一个对象,其中有一个List。该列表是我希望所选值最终的集合。下面是相关代码。

第二节

模型片段:

public class SubscriptionDetailsModel {
    public CronTabModel CrontabModel { get; set; }
    //...
}
public class CronTabModel {
    public List<DayOfWeek> On { get; set; }
}

控制器:

[HttpPost]
public ActionResult _AddEdit(SubscriptionDetailsModel vm) {
    //etc, etc, etc
}

当然,还有view:

@foreach (var day in Model.AllDays) {
    <input type="checkbox" name="On" value="@day"/> <label>@day</label><br />
}

编辑:我看到令人困惑的结果的原因是由于我的视图中其他地方的错别字。

从技术上讲,第1节中的代码对我的情况是可用的,我可以做一些字符串解析,等等。是否有可能使Checkbox组从一个集合(Model.AllDays)中填充,并在第二个集合(Model.CronTabModel.On)中返回?

MVC复选框分组

将模型绑定到列表有点尴尬,但这是可能的。MVC有一个问题,在索引的差距,他们确实建立了一个助手来修复它。隐藏字段让MVC知道间隙,以便它可以有效地绑定。

@for (var index =; index < Model.AllDays.Count(); index++) {
    @Html.Hidden("AllDays.Index", index)
    @Html.CheckBoxFor(m => Model.AllDays[Index], new { Value= Model.AllDays[index] }
    <label>@Model.AllDays[Index]</label><br />
}

这应该允许您绑定到一个复选框列表,这些复选框将它们的值发送回来,并绑定到模型上一个名为AllDays的属性。

如果您想要更改名称,您将需要更改您发出的模型上的名称。这样做允许MVC将索引器添加到名称上,因此最终得到

AllDays[0] = "Sunday"
AllDays[1] = "Monday"

等等。

关于数组绑定的更多信息http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx