ASP.NET MVC视图如何通过GET请求将选中行的多个ID传递给控制器
解决方案
有更简便的实现,完全不用手动写JS收集选中项、拼接GET参数,依托ASP.NET MVC自带的表单绑定能力即可完成,代码量极少。
方法1:原生表单提交(几乎无需额外JS,最简方案)
直接将复选框值绑定为行ID,表单提交时会自动把所有勾选的ID传到后台,不需要处理模型列表筛选:
视图代码
@using (Html.BeginForm("目标Action名称", "目标控制器名称", FormMethod.Get)) { <table> @for (int i = 0; i < Model.Count; i++) { <tr> <td> <!-- 统一复选框name为selectedIds,value绑定当前行ID --> <input type="checkbox" name="selectedIds" value="@Model[i].ID" /> </td> <td> @Html.DisplayFor(m => m[i].CN) </td> </tr> } </table> <button type="submit">提交选中项</button> }
后台控制器接收代码
public ActionResult 目标Action名称(int[] selectedIds) { // selectedIds已经是所有勾选行的ID集合,直接使用即可 // 如果需要其他行数据,直接根据ID查询数据库即可 }
方法2:保留原有强类型绑定写法
如果你不想修改现有CheckBoxFor的绑定逻辑,只需要给原有代码套一层表单即可,后台接收后筛选选中项:
视图代码
@using (Html.BeginForm("目标Action名称", "目标控制器名称", FormMethod.Get)) { <table> @for (int i = 0; i < Model.Count; i++) { <tr> @Html.HiddenFor(m => m[i].ID) <td> @Html.CheckBoxFor(m => m[i].Selected) </td> <td> @Html.DisplayFor(m => m[i].CN) @Html.HiddenFor(m => m[i].CN) </td> </tr> } </table> <button type="submit">提交选中项</button> }
后台控制器接收代码
public ActionResult 目标Action名称(List<你的模型类名> model) { // 筛选出勾选的行即可 var selectedItems = model.Where(x => x.Selected).ToList(); }
注意事项
- GET请求有长度限制,如果需要提交的选中项数量较多,把
FormMethod.Get改为FormMethod.Post即可,后台接收逻辑不需要做任何修改。 - 如果需要加提交前校验(比如判断是否至少选中一项),只需要加几行JS监听表单submit事件即可,不需要复杂的选中项收集逻辑。
内容的提问来源于stack exchange,提问作者user3824508
相关产品推荐
相关产品推荐

