我有一个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)
{
}
我已尝试过上述方法,但没有取得任何成功。有什么建议吗?
答案 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" ... />
}