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

ASP.NET Core表单验证问题:decimal字段无法提交带逗号的数字

这个问题我之前也碰到过,本质是ASP.NET Core默认的客户端验证(基于jQuery Validate)采用的是en-US文化规则,它只认.作为小数点分隔符,而你输入的是,,所以客户端层面就直接拦截了提交,连服务器都没到。

下面给你几个靠谱的解决办法,按需选择:

方法一:配置应用支持对应本地化文化(推荐)

如果你的目标用户是使用逗号作为小数点的地区(比如欧洲),直接在全局配置应用的请求文化,让整个系统都适配这种数字格式:

在Program.cs里添加文化配置:

builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    // 这里以法国文化为例,你可以换成需要的文化(比如de-DE、es-ES等)
    var supportedCultures = new[]
    {
        new CultureInfo("fr-FR"),
        new CultureInfo("en-US") // 保留英文作为备选
    };

    options.DefaultRequestCulture = new RequestCulture("fr-FR");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

// 记得把本地化中间件加到管道里,要放在UseRouting之后,UseAuthorization之前
app.UseRequestLocalization();

这样一来,服务器端的模型绑定能正确解析带逗号的decimal,客户端验证也会自动适配对应的文化规则,不用额外改前端代码。

方法二:自定义客户端验证规则(灵活适配个别页面)

如果不想全局改文化,只是个别页面需要支持逗号输入,可以直接覆盖jQuery Validate的默认number验证方法:

在你的Razor页面的Scripts区块里加这段代码:

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    <script>
        // 重写number验证方法,允许逗号或点作为小数点
        $.validator.methods.number = function (value, element) {
            // 把输入里的逗号替换成点,再用默认规则验证
            const normalizedValue = value.replace(',', '.');
            return this.optional(element) || $.validator.methods.number.call(this, normalizedValue, element);
        };

        // 重新初始化表单验证,确保新规则生效
        $("#your-form-id").validate();
    </script>
}

记得把#your-form-id换成你实际的表单ID,这样不管用户输入.还是,,客户端验证都会通过,服务器端接收时也会自动处理(前提是服务器文化支持,或者你在模型绑定里做了处理)。

方法三:配合DisplayFormat属性优化显示与输入

在ViewModel的Price字段上加上DisplayFormat属性,让输入框显示格式化后的数字,同时允许编辑时使用对应格式:

public class MyViewModel 
{
    // N2表示保留两位小数,根据需求调整格式串
    [DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)]
    public decimal Price { get; set; }
}

这个方法最好和方法一配合使用,单独用的话还是需要客户端验证的调整,不然输入逗号还是会被拦截。

最后提醒下:确保你的页面已经引用了_ValidationScriptsPartial,里面包含了jquery.validate.js和jquery.validate.unobtrusive.js,这两个是ASP.NET Core客户端验证的基础,没引用的话验证功能根本起不来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:36:03