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

ASP.NET Core中CheckBox提交表单始终返回false值如何解决

问题根因及解决方案

1. 模型绑定名称不匹配

你使用asp-for="@city.OnHeader"时,ASP.NET Core Tag Helper会自动生成name="city.OnHeader"的复选框字段,而后端Action接收的参数为WeatherModel theWeather,模型绑定默认会寻找前缀为theWeather的对应字段,匹配失败就会赋值默认值false。

可选修复方案二选一:

  • 方案1:给后端接收模型加绑定前缀匹配前端生成的字段名
[HttpPost]
public IActionResult Update([Bind(Prefix = "city")] WeatherModel theWeather, int cityId)
{
    _weatherService.Update(cityId, theWeather.OnHeader, theWeather.OnProfile);
    return RedirectToAction("Settings");
}
  • 方案2:手动指定前端复选框的name属性,和后端模型属性名对齐
<td><input type="checkbox" name="OnHeader" @(city.OnHeader ? "checked" : "") /></td>
<td><input type="checkbox" name="OnProfile" @(city.OnProfile ? "checked" : "") /></td>

2. HTML结构不规范导致表单字段丢失

当前你直接把<tr>标签放在<form>下,不符合HTML规范:<tr>必须作为<table>的子元素使用,结构错误会导致浏览器自动调整DOM结构,把复选框元素移到表单外部,提交时无法携带字段值,永远返回false。
请检查调整HTML结构,确保<form>嵌套在<td>内,或者表单包裹完整的<table>元素。

额外注意

不要手动给复选框设置value="false",ASP.NET Core复选框Tag Helper会默认生成一个同名隐藏域值为false,提交时如果勾选复选框会同时提交true和false两个值,模型绑定会自动取第一个有效值true,手动修改value会破坏该默认逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:05