MVC.NET,JQuery - 如何提交由包含复选框和文本输入的行的JQuery数据表组成的表单?

时间:2015-05-15 04:29:22

标签: jquery ajax asp.net-mvc asp.net-mvc-4 asp.net-ajax

我有一个jquery数据表,它有多行,包含复选框和文本输入字段。我的目标是选择所有选中复选框的行,并通过ajax提交它们。我能够获得" id"检查所有复选框的属性,但如何获取该行其余部分中列的值(标签和文本输入)?

我还需要通过ajax调用将这些发布到动作中。我应该怎么做,如何在后期行动中捕捉到这些价值?

我有学生模特。

public class Student {

public string studentid { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }

}

视图绑定到此模型(@model Project.Models.IEnumerable<Student>),并使用以下内容生成数据表:

<table>
<thead>
<tr>
<td>Select</td>
<td>StudentId</td>
<td>FirstName</td>
<td>LastName</td>
</tr>
</thead>
<tbody>
<tr>
    foreach (var student in Model)
    {
    <td><input type="checkbox" id="@student.studentid"/></td>
    <td>@student.studentid</td>
    <td>@student.firstname</td>
    <td><input type="text" value="@student.lastname"/></td>
    }
</tr>
<tbody>
</table>

姓氏字段是可编辑的,只有选中了复选框的行才能在数据库中更新。

所以,当我提交此表格时,在后期行动中,我会这样做吗?

[HttpPost]
public ActionResult UpdateStudent(IEnumerable<Student> students)
{

}

我已尝试过上述方法,但没有取得任何成功。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您不能使用foreach循环,因为它会生成不带索引器的重复name属性,因此它们无法绑定到集合(由于重复{{它也会生成无效的html} 1}}属性)。您必须使用id循环,并为for类型设置IList<Student>或自定义EditorTemplate

由于未选中的复选框不会发布值,但文本框会发送,您需要先创建一个视图模型,其中包含({)Student属性,您可以使用bool IsSelected绑定该属性,并确保将始终发布与相应文本框匹配的值。

@Html.CheckBoxFor()

然后在视图中

public class StudentVM
{
    public string ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool IsSelected { get; set; }
}

您的控制器方法可能看起来像

@model List<yourAssembly.StudentVM>
@using (Html.BeginForm())
{
    <table>
        ....
        <tbody>
            for(int i = 0; i < Model.Count; i++)
            {
                <tr>
                    <td>@Html.CheckBoxFor(m => m[i].IsSelected)</td>
                    <td>
                        @Html.HiddenFor(m => m[i].ID)
                        @Html.DisplayFor(m => m[i].ID)
                    </td>
                    ....
                    <td>@Html.TextBoxFor(m => m[i].LastName)</td>
                </tr>
            }
        </tbody>
    </table>
    <input type="submit" ... />
}