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知道间隙,以便它可以有效地绑定。
@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