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

ASP.NET中EditorFor控件无法输入小数、加step属性后提交值为null问题

问题根因

你遇到的提交后Sum为null(实际为模型绑定失败后的异常值/默认值)是两个核心原因共同导致的:

  • [DisplayFormat]的ApplyFormatInEditMode = true配置和type="number"的输入框格式要求冲突,渲染出的初始值不符合浏览器数字输入框的规范
  • 服务端区域文化的小数分隔符和浏览器提交的数字格式不匹配,导致模型绑定失败
解决步骤

步骤1:调整模型特性配置

如果不需要在编辑状态强制格式化展示,直接将ApplyFormatInEditMode设为false即可:

[DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = false)]
public decimal Sum { get; set; }

如果需要保留编辑时的格式化展示,可以去掉手动指定的type="number"属性,改用文本输入配合前端校验。

步骤2:修正视图控件写法

优先改用TextBoxFor代替EditorFor,避免内置Editor模板和你自定义属性的冲突,同时确保step属性加引号,max属性正确转换为字符串:

@Html.TextBoxFor(model => model.Sum, new { 
    @class = "form-control", 
    @placeholder = "Kwota", 
    @type = "number", 
    @min = "0.00", 
    @max = TempData["MaxValue"]?.ToString(), 
    @step="0.01" 
})

步骤3:修复小数格式模型绑定问题(可选,针对非中文区域站点)

如果你的站点使用的区域文化(比如示例中的波兰语pl-PL)默认用逗号作为小数分隔符,需要配置ASP.NET支持识别点作为小数分隔符,.NET Core/.NET 5+可在Program.cs里添加如下配置:

builder.Services.Configure<RequestLocalizationOptions>(opts =>
{
    var supportedCultures = new[] { new CultureInfo("pl-PL") };
    opts.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("pl-PL");
    opts.SupportedCultures = supportedCultures;
    opts.SupportedUICultures = supportedCultures;
    // 配置数字解析允许点作为小数分隔符
    supportedCultures[0].NumberFormat.NumberDecimalSeparator = ".";
});

步骤4:验证模型状态

在POST接口里先检查ModelState.IsValid,如果绑定失败可以直接查看到具体的错误信息,快速定位问题:

[HttpPost]
public IActionResult TransferForm(Transfer model)
{
    if(!ModelState.IsValid)
    {
        // 可打断点查看ModelState的错误明细
        return View(model);
    }
    // 后续业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:05