MVC - 如何向控制器操作提交两组多个复选框?

时间:2013-06-11 19:20:59

标签: html asp.net-mvc forms razor

我在表单中有两组复选框,几乎与此相同:

<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() {}

我需要将两组复选框都作为集合提交,以便我可以遍历它们并执行一些数据库操作。我之前从未做过这样的事情,唯一阻止我的是这些复选框。

如何将这些值作为两个单独的集合提交?

3 个答案:

答案 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) 
{
...
}