我在表单中有两组复选框,几乎与此相同:
<input type="checkbox" value="1" name="Test Course"
checked="checked" />Test Course
<input type="checkbox" value="2" name="Test Course 2" />Test Course 2
<input type="checkbox" value="3" name="Test Course 3" />Test Course 3
表单是通过Razor生成的。这是代码:
@using (Html.BeginForm("Save", "Material",
new { id = Model.Material.FirstOrDefault().ID },
FormMethod.Get, new { id = "associationForm" })
{
<h3>@Model.Material.FirstOrDefault().Title</h3>
Html.RenderPartial("Association/_Course", Model);
Html.RenderPartial("Association/_Track", Model);
<br />
<input type="submit" value="Save" />
}
复选框通过您在表单中看到的两个部分视图呈现。
目前,new { id = Model.Material.FirstOrDefault().ID }
声明中第二行参数中成功提交的唯一数据是@using() {}
。
我需要将两组复选框都作为集合提交,以便我可以遍历它们并执行一些数据库操作。我之前从未做过这样的事情,唯一阻止我的是这些复选框。
如何将这些值作为两个单独的集合提交?
答案 0 :(得分:1)
为此,您必须渲染一个集合。我假设你的模型中有两个集合,一个叫做Courses,另一个叫做Tracks。
@for(int i = 0; i < collection.Count(); i++ {
// Boolean property indicating value is selected on your Courses view model submodel
Html.CheckBoxFor(model => model.Courses[i].CourseSelected);
Html.Raw(Model.Courses[i].CourseName);
}
然后为你的曲目做同样的事情。
EDIT;
假设您有一个List<Course>
的ViewModel,其中Course如下所示:
public class Course {
public bool CourseSelected {get;set;}
public string CourseName {get;set;}
}
您必须根据复选框集合的索引查找课程。因此,如果设置了Course [0],您需要根据位置获得第一个课程。您也可以按名称查找,但是您必须包含一个隐藏字段,以便将其发布回包含该名称的表单。否则,您将使CourseName为null,并且您将使用布尔值绑定数组。
答案 1 :(得分:0)
好的,我认为你需要同一组输入的name属性加上方括号,比如“checkgroup1 []”
<input type=checkbox name=checkgroup1[] value=1>
<input type=checkbox name=checkgroup1[] value=2>
答案 2 :(得分:0)
如果在视图中定义了两组具有不同名称的复选框,例如:
<input type=checkbox name=checkgroup1[] value="x">
.
.
.
<input type=checkbox name=checkgroup2[] value="y">
.
.
.
你可以像这样在控制器上声明你的post方法:
[HttpPost]
public ActionResult YourAction(YourModel model, string[] checkgroup1, params string[] checkgroup2)
{
...
}