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

ASP.NET Core MVC无法保存小数:报错‘保费必须是数字’求助

解决ASP.NET Core MVC中小数数值保存的验证错误问题

问题根源分析

你遇到的"The premium cover must be a number"验证错误,主要由两个核心问题导致:

  1. HTML输入标签存在语法错误,导致前端验证逻辑异常
  2. 服务器与客户端的区域文化小数分隔符不匹配,引发验证冲突

具体解决方案

1. 修复HTML输入框的语法错误

你的input标签中value属性存在引号闭合错误,修正后的代码如下:

<div class="col-6 mb-2">
    <label asp-for="Member.Premium" class="control-label pt-2" style="font-size:18px"></label>
    <input asp-for="Member.Premium" id="premiumrate" class="form-control" 
           value="@Model.Member.Premium.ToString("F2").Replace(",", ".")" />
    <span asp-validation-for="Member.Premium" class="text-danger"></span>
</div>

注:原代码中value属性结尾多了一个冗余引号,导致标签解析异常,直接影响前端验证逻辑。

2. 统一全局区域文化配置

在Program.cs(.NET 6+)或Startup.cs(.NET 5及更早版本)中配置全局区域文化,强制统一小数分隔符:

// .NET 6+ Program.cs示例
var builder = WebApplication.CreateBuilder(args);

// 配置区域文化,统一使用英文格式(小数分隔符为点)
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[] { "en-US" };
    options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en-US");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

// 其他服务配置...

var app = builder.Build();

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

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

3. 优化模型验证特性

在模型上添加格式验证与显示配置,确保前后端验证规则一致:

[Display(Name = "Premium Cover")]
[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
[RegularExpression(@"^\d+(\.\d{1,2})?$", ErrorMessage = "保费必须是最多两位小数的数字")]
public decimal Premium { get; set; }

4. 简化输入框配置(可选)

如果不需要自定义value格式,直接使用asp-for自动绑定,并指定type="number"和step="0.01"来限制输入:

<input asp-for="Member.Premium" id="premiumrate" class="form-control" 
       type="number" step="0.01" />

这种方式会自动处理模型值的格式渲染,同时触发浏览器原生数字验证。

5. 确保客户端验证脚本正确引用

页面必须引入ASP.NET Core客户端验证依赖的脚本:

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:41