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
相关产品推荐
相关产品推荐

