ASP.NET MVC 5提交详情页表单控制器获null值、id参数空值报错如何解决
问题根因
你遇到的控制器参数为空、id参数null报错的问题,核心有两个原因:
- ASP.NET MVC的模型绑定依赖表单控件的
name属性与模型字段名完全匹配,你当前视图内的表单控件要么未设置正确的name属性,要么仅用DisplayFor做纯展示,这类展示标签不会随表单提交到后端,最终导致模型绑定失败拿到null值。 - 报错提示
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参数报错,二选一即可:- 去
RouteConfig.cs里把默认路由的id改为可选:url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } - 表单里加隐藏域传id值:
@Html.Hidden("id", 你的业务id值)
- 去
内容的提问来源于stack exchange,提问作者Tdigges
相关产品推荐
相关产品推荐

