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

Razor Pages无法将'True'字符串转换为Boolean类型的问题

Razor Pages无法绑定字符串'True'到bool字段的原因及解决办法

核心原因

ASP.NET Core的模型绑定规则分两种场景,直接导致你遇到的问题:

  1. JSON格式提交时:如果AJAX请求用contentType: "application/json"提交数据,JSON规范里布尔值是小写无引号的true/false,而你提交的"True"是字符串类型,类型不匹配。System.Text.Json默认不会自动将字符串类型的"True"转换为bool,模型绑定失败后,整个railcars对象会被设为null。
  2. 表单编码格式提交时:虽然表单绑定器支持宽松转换(不区分大小写的"true"/"false"字符串都能转bool),但如果你的请求头或数据格式不对,也可能导致绑定失败。

解决办法

  • 前端修正(最直接):把从DOM获取的字符串值转为布尔类型后再提交,比如:
    // 假设从DOM拿到的是字符串'IsLoaded'值
    const isLoadedStr = document.querySelector('#someElement').dataset.isloaded;
    const data = {
        IsLoaded: isLoadedStr === 'True' || isLoadedStr === 'true'
        // 其他字段...
    };
    // 提交AJAX时确保是布尔值而非字符串
    
  • 后端自定义转换规则:如果无法修改前端,可以给模型字段添加自定义类型转换:
    using System.ComponentModel;
    using System.Globalization;
    
    public class ArriveRailcarInfo
    {
        [TypeConverter(typeof(CustomBooleanConverter))]
        public bool IsLoaded { get; set; }
        // 其他字段...
    }
    
    public class CustomBooleanConverter : BooleanConverter
    {
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value is string str)
            {
                return string.Equals(str, "True", StringComparison.OrdinalIgnoreCase) || 
                       string.Equals(str, "1", StringComparison.OrdinalIgnoreCase);
            }
            return base.ConvertFrom(context, culture, value);
        }
    }
    
  • 改用表单编码提交:如果不需要JSON格式,把AJAX的contentType设为application/x-www-form-urlencoded,并将数据转为表单格式提交,此时表单绑定器会自动处理字符串"True"到bool的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:40:46