You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:36:03