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

ASP.NET MVC 5提交详情页表单控制器获null值、id参数空值报错如何解决

问题根因

你遇到的控制器参数为空、id参数null报错的问题,核心有两个原因:

  1. ASP.NET MVC的模型绑定依赖表单控件的name属性与模型字段名完全匹配,你当前视图内的表单控件要么未设置正确的name属性,要么仅用DisplayFor做纯展示,这类展示标签不会随表单提交到后端,最终导致模型绑定失败拿到null值。
  2. 报错提示id参数为空,是因为你项目的默认路由配置中要求id参数必传,提交表单时没有携带该参数触发了校验报错。

解决步骤

  • 给所有需要传到后端的字段添加可提交控件
    你当前仅给CitationNumber加了输入框,其余字段都是纯展示不会提交,需要在表单内部给所有需要保留的CitationDetail字段加隐藏域,示例如下:
    @Html.HiddenFor(model => model.DefendantName)
    @Html.HiddenFor(model => model.DateofBirth)
    @Html.HiddenFor(model => model.VehicleTagNumber)
    <!-- 其余你需要传到后端的CitationDetail字段都按这个格式添加即可 -->
    
  • 修正现有控件的name属性匹配模型
    现有CitationNumber的输入框没有正确的name属性,直接用强类型帮助类生成更稳妥:
    @Html.TextBoxFor(model => model.CitationNumber, new { id = "txtcitationnber" })
    
    下拉框和支付金额输入框如果需要传到后端,要么给CitationDetail模型新增对应属性,要么给控件加和接收参数匹配的name属性,示例如下:
    <select id="chargecodes" name="ChargeCode">
    <input type="text" id="paymentamount" name="PaymentAmount" onkeypress="return isNumberKey(event)" />
    
    对应控制器参数可以调整为同时接收这两个值:
    [HttpPost]
    public ActionResult Index3(CitationDetail citation, string ChargeCode, decimal PaymentAmount)
    
  • 处理id参数报错,二选一即可:
    1. 去RouteConfig.cs里把默认路由的id改为可选:url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    2. 表单里加隐藏域传id值:@Html.Hidden("id", 你的业务id值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:04