0

我有两组复选框,它们的形式几乎与此相同:

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

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

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

4

3 回答 3

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);
}

然后对您的曲目执行相同的操作。

编辑;

假设您有一个 ViewModel,List<Course>其中课程看起来像这样:

public class Course {
    public bool CourseSelected {get;set;}
    public string CourseName {get;set;}
}

您必须根据复选框集合的索引查找课程。因此,如果设置了 Course[0],则需要根据位置获取第一门课程。您也可以按名称查找它,但您必须包含一个隐藏字段以允许将其发布回包含该名称的表单。否则,您将 CourseName 将为空,并且您将只使用布尔绑定的数组。

于 2013-06-11T19:32:27.730 回答
0

好的,我认为您需要同一组中输入的名称属性相同加上方括号,例如“checkgroup1 []”

<input type=checkbox name=checkgroup1[] value=1> 
<input type=checkbox name=checkgroup1[] value=2> 
于 2013-06-11T20:04:40.450 回答
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) 
{
...
}
于 2016-05-10T12:35:52.357 回答