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

ASP.NET MVC表单提交时控制器接收decimal值始终为0问题

问题根因

表单字段的name属性和C#模型属性名不匹配,导致ASP.NET Core模型绑定失败:

  • ASP.NET Core 模型绑定默认按照表单字段的name值和模型属性名做映射(匹配时不区分大小写)
  • Title字段手动设置的name="title"、Description字段手动设置的name="description",和属性名仅大小写不同,因此可以正常绑定
  • TargetAmount字段手动设置的name="amount"、CollectedAmount字段手动设置的name="camount",和属性名完全不匹配,绑定器找不到对应字段,就会给值类型decimal赋默认值0
  • 你粘贴的视图代码里还混入了大量多余的反引号(`)字符,会破坏HTML结构,也需要一并清理。
修复方案

推荐优先用第一种方案,维护成本最低:

  • 方案1:删除所有表单控件手动写的name属性,让asp-for标签助手自动生成和模型属性完全匹配的name值。针对金额输入框,额外加step="0.01"属性支持输入两位小数,示例代码:
<label for="amount" class="form-label">Target Amount</label>
<input asp-for="TargetAmount"
       asp-format="{0:n2}"
       class="form-control"
       type="number"
       id="amount"
       step="0.01" />

<label for="camount" class="form-label">Collected Amount</label>
<input asp-for="CollectedAmount"
       asp-format="{0:n2}"
       class="form-control"
       type="number"
       id="camount"
       step="0.01" />
  • 方案2:如果必须保留自定义的name值,给对应模型属性加绑定特性指定表单字段名:
using Microsoft.AspNetCore.Mvc;
public class NewCampaignCommand
{
    public string Title { get; set; }
    public string Description { get; set; }
    [BindProperty(Name = "amount")]
    public decimal TargetAmount { get; set; }
    [BindProperty(Name = "camount")]
    public decimal CollectedAmount { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:30:22