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

ASP.NET MVC C#中HTML提交decimal数值被识别为integer类型问题

ASP.NET MVC 表单提交decimal小数被识别为integer整数的核心原因

该问题由类型绑定环节的值解析偏差导致,常见触发场景如下:

  • 区域文化(Culture)的小数分隔符不匹配
    ASP.NET MVC 默认使用当前服务端线程的文化配置做值解析,如果当前文化使用,作为小数分隔符(如印尼语、德语等区域),前端传入的带.的小数(如15.7)会把.识别为无意义的千位分隔符直接丢弃,最终解析出的数值是15,表现为整数。反过来如果文化要求用.做小数位,前端传了带逗号的小数也会出现同类截断。
  • 非强类型接收导致的默认类型推断
    如果后端不是用强类型的decimal类型属性/参数接收值,而是用FormCollection、dynamic、object类型接值,默认模型绑定器会对传入的数字字符串做自动类型推断:如果字符串里没有小数分隔符,就会默认解析为int类型,不会自动转成decimal。
  • 前端提交前的值被意外截断
    常见触发情况:
    • 前端取表单值时错误使用parseInt()做转换,直接丢弃小数部分
    • 数字输入框<input type="number">的step属性设置为1,部分浏览器会在提交时自动对输入值做取整处理
    • 前端业务逻辑里做了取整运算(如Math.round()、位运算)后才拼接提交参数,传给后端的本身就是整数值
  • 自定义模型绑定/过滤器的逻辑错误
    如果项目里实现了自定义的DefaultModelBinder、全局值过滤器或者参数转换中间件,逻辑里错误对数值类型做了int转换、小数截断,也会导致最终拿到的值是整数类型。
  • 表单字段名不匹配导致绑定失败
    如果前端表单字段的name属性和后端强类型模型的decimal属性名不一致,模型绑定器会给decimal属性赋默认值0,0本身是整数值,容易被误判为“被识别成了整数”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:03:23