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

ASP.NET MVC模型类中Decimal的TypeConverter特性失效问题

解决方法

ASP.NET默认的模型绑定不会自动识别属性上标注的TypeConverter,这就是你的转换器断点从未触发的核心原因。不用修改全局模型绑定器,也不用添加额外属性,给目标属性补充一个ModelBinder特性即可解决问题。

1. 修改模型属性的特性配置

在原有TypeConverter特性下方,添加指定TypeConverterModelBinder的特性,让模型绑定过程调用你的自定义转换器:

using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;

[TypeConverter(typeof(CommaDecimalConverter))]
[ModelBinder(BinderType = typeof(TypeConverterModelBinder))]
public decimal? Foo { get; set; }

2. 优化转换器逻辑(可选)

你的转换器核心逻辑没问题,可以补充空字符串判断,避免空输入时出现解析异常:

public class CommaDecimalConverter : DecimalConverter
{
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string text)
        {
            if (string.IsNullOrWhiteSpace(text))
                return null;
            
            return decimal.Parse(text, new CultureInfo("cs-CZ"));
        }

        return base.ConvertFrom(context, culture, value);
    }
}

完成以上修改后,模型绑定过程就会触发你的自定义转换器,断点能正常生效,同时实现了让decimal?属性接受逗号作为小数点分隔符的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:27:47