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

ASP.NET Core部署后Number输入框无法接收Decimal值的原因

问题原因分析

你遇到的问题核心在于ASP.NET Core的模型绑定/验证阶段没有正确使用en-US文化解析小数,虽然你说本地和部署环境区域都是美国,但实际应用可能没有明确配置请求文化,导致部署服务器上的默认文化(或应用池用户的文化)不是en-US,进而用了错误的小数分隔规则(比如逗号分隔),无法识别4.56这样的点号小数。

解决方案

1. 强制配置应用的请求本地化文化

在Program.cs中添加请求本地化配置,确保应用全局使用en-US文化处理数据解析:

// 注册本地化服务
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var enUsCulture = new[] { "en-US" };
    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedCultures = enUsCulture;
    options.SupportedUICultures = enUsCulture;
    // 禁用自动检测客户端文化,强制使用配置的en-US
    options.RequestCultureProviders.Clear();
});

// 在中间件管道中启用本地化(注意放在UseRouting之前)
app.UseRequestLocalization();

2. 验证服务器应用池的用户区域设置

部署服务器的应用池运行用户可能没有设置en-US区域:

  • 打开服务器的「区域设置」,确认当前用户(或应用池标识的用户)的格式为「英语(美国)」
  • 如果是IIS,可在应用池的「高级设置」中,设置「加载用户配置文件」为True,确保应用使用用户的区域配置

3. 确保客户端验证与服务器端一致

ASP.NET Core的客户端验证脚本会根据应用文化生成规则,配置好全局文化后,客户端验证会自动适配en-US的小数分隔符,无需额外修改前端代码。

额外提示

你的控制器代码中有一处语法错误:

model.OutPutText = string.Format("{0}cm - {1}", LengthConverters.ConvertMToCm(model.InputValue);

缺少了闭合括号,修正为:

model.OutPutText = string.Format("{0}cm - {1}", LengthConverters.ConvertMToCm(model.InputValue));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:15:30