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

如何在.cshtml表单中为多个复选框添加至少选1个的必填校验

实现方案

这种需求完全可以在.cshtml中实现,建议同时做客户端+服务端双重校验,避免前端校验被绕过的风险。

1 修复原有代码的问题

你现有代码里的counter变量定义在for循环内部,每次循环都会被重置为0,统计选中数量的逻辑完全无效,这部分代码可以直接删除。

2 客户端校验(提交前实时拦截)

给复选框加统一类名,绑定表单提交事件校验选中数量:

@using (Html.BeginForm("Data", "Controller", FormMethod.Post, new { id = "checkboxForm" }))
{
    for (int i = 0; i < Model.items.Count; i++)
    {
        @* 给所有复选框添加统一类名方便选中 *@
        @Html.CheckBoxFor(r => Model.items[i].IsSelected, new { @class = "group-checkbox" })
        <label>  @Model.items[i].te</label><br />

        @Html.HiddenFor(h => @Model.items[i].Id)
        @Html.HiddenFor(h => @Model.items[i].Name)
    }
    <span id="checkTip" style="color:red; display:none;">请至少选择一个选项</span><br/>
    <input id="Button" type="submit" value="Next" />
}

<script>
document.getElementById('checkboxForm').addEventListener('submit', function(e) {
    const checkedNum = document.querySelectorAll('.group-checkbox:checked').length;
    const tip = document.getElementById('checkTip');
    if (checkedNum < 1) {
        e.preventDefault(); // 阻止表单提交
        tip.style.display = 'inline';
        return false;
    }
    tip.style.display = 'none';
    return true;
})
</script>

3 服务端校验(兜底防绕过)

前端校验可以被用户禁用JS绕过,必须在后端Action补充校验:

[HttpPost]
public ActionResult Data(你的Model类 model)
{
    // 校验选中数量
    if (model.items.Count(x => x.IsSelected) < 1)
    {
        ModelState.AddModelError("", "请至少选择一个选项");
        return View(model);
    }
    // 正常业务逻辑
    return RedirectToAction("下一页Action");
}

内容的提问来源于stack exchange,提问作者MarkCo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:36:01