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

Minimal API绑定复选框值到复杂类型遇报错,求验证文档正确性

ASP.NET Core表单复选框绑定布尔属性报错的原因与解决

问题详情

按官方文档的表单绑定说明,尝试将表单复选框值绑定到Todo类的IsCompleted布尔属性时,运行抛出错误:

BadHttpRequestException: The value 'on' is not valid for 'IsCompleted'.

Todo类代码如下:

class Todo
{
    public string Name { get; set; } = string.Empty;
    public bool IsCompleted { get; set; } = false;
    public DateTime DueDate { get; set; } = DateTime.Now.Add(TimeSpan.FromDays(1));
}

我怀疑文档存在疏漏,认为需要额外添加app.UseAntiforgery();中间件才能正常工作,提交文档bug前希望得到验证。

验证与解决方案

首先明确:这个报错和UseAntiforgery中间件完全无关,文档没提及它是正确的——CSRF防护逻辑不影响模型绑定的解析规则。

报错的核心原因是:HTML复选框默认选中时提交的是on字符串,但ASP.NET Core的布尔类型绑定仅识别true/false或1/0格式的值,因此无法完成解析。

解决方法有两种,优先选第一种:

  • 修改表单复选框的value属性:将复选框的value设置为true,选中时提交的就是符合绑定要求的true值;未选中时该字段不会被提交,IsCompleted会使用类中定义的默认值false:
    <input type="checkbox" name="IsCompleted" value="true" />
    
  • 自定义模型绑定(可选):编写自定义绑定器将on转换为true,但这种方式没必要,调整表单值是更高效的方案。

结论

文档本身没有错误,报错是因为复选框默认提交值不符合ASP.NET Core布尔属性的绑定规则,和UseAntiforgery中间件无关。只需调整表单复选框的value为true即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:20