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

ASP.NET Core中输入带小数点的decimal值变为零的问题求助

解决ASP.NET Core MVC中Decimal类型参数小数输入绑定为0的问题

核心原因

问题源于模型绑定的文化区域不匹配,以及数据注解的类型设置与实际需求不符,导致客户端输入的小数格式无法被服务器正确解析,最终默认赋值为0。

解决方案

1. 修正模型的数据注解

[DataType(DataType.Currency)] 是针对货币类型的注解,会干扰重量类普通decimal值的绑定逻辑,替换为数值类型适配的配置:

[Required]
[DataType(DataType.Decimal)]
[Display(Name = "Waga [kg]")]
[DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)] // 明确小数格式,编辑模式生效
public decimal Weight { get; set; }

2. 配置服务器端的文化支持

确保服务器端能识别客户端使用的小数分隔符(逗号/点号),在Program.cs中添加区域配置:

var builder = WebApplication.CreateBuilder(args);

// 添加支持的文化,按需选择逗号分隔(如pl-PL)或点号分隔(如en-US)
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[]
    {
        new CultureInfo("pl-PL"),
        new CultureInfo("en-US")
    };

    options.DefaultRequestCulture = new RequestCulture("pl-PL");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

// ... 其他服务配置

var app = builder.Build();

// 启用区域中间件
app.UseRequestLocalization();

// ... 其他中间件配置

3. 优化前端输入控件

给输入控件添加区域属性,让浏览器匹配服务器的格式处理规则:

<label asp-for="Input.Weight"></label>
<input asp-for="Input.Weight" type="number" step="any" min="20" class="form-control" lang="pl" />
<span asp-validation-for="Input.Weight" class="text-danger"></span>
  • 若使用点号作为小数分隔符,将lang="pl"替换为lang="en"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:18:24