ASP.NET Core控制器模型绑定失效,表单提交后模型为空的问题
问题:AJAX表单提交后控制器接收的模型为空
我在cshtml文件中编写了如下AJAX表单:
<form action="@Url.Action(controllerAction, controller, new { area = area })" data-ajax="true" data-ajax-begin="OnBeginForm" data-ajax-method="POST" data-ajax-success="OnSuccess" data-ajax-failure="OnFailure" method="post"> { @Html.AntiForgeryToken() <div class="modal-body"> <div class="alert alert-error" id="errorContainer" style="display:none;"> <span id="errorList"> </span> </div> <div class="form-horizontal"> <input type="hidden" asp-for="Id" value="@Model.Id" /> <div class="box-body"> <h4> Delete City '@Model.Code'? </h4> </div> </div> </div> <div class="modal-footer"> <button type="button" onclick="controlSubmit(this,this.form);" class="btn btn-default pull-right"><i class="fa fa-times"></i> Delete</button> <a data-dismiss="modal" style="margin-right:15px; cursor:pointer; vertical-align:-webkit-baseline-middle">Cancel</a> </div> } </form>
控制器代码:
[HttpPost] public async Task<IActionResult> Delete(CitiesDataModel model) { log.Info("Deleting City..."); log.Info(model); }
模型定义:
public class CitiesDataModel { public int Id { get; set; } public string IdEnc { get; set; } [Display(Name = "Code")] public string Code { get; set; } }
表单已成功提交到控制器,日志正常输出,但接收的CitiesDataModel模型为空,请问原因是什么?
原因及解决办法
表单结构语法错误:表单内部存在多余的
{和}符号,这会破坏HTML结构的合法性,导致浏览器无法正确识别表单内的输入字段,最终无法将字段值传递给控制器。直接删除这两个符号即可。提交按钮类型不符合要求:当前按钮设置为
type="button",这类按钮不会触发原生表单提交行为,完全依赖自定义的controlSubmit函数处理提交。如果该函数没有正确序列化表单数据或调用提交逻辑,就会导致控制器接收不到数据。- 方案1:将按钮类型改为
type="submit",移除onclick事件,让ASP.NET Ajax的内置逻辑处理提交。 - 方案2:检查
controlSubmit函数,确保它正确使用$.ajax或form.submit(),并且正确序列化表单数据(比如使用$(form).serialize())。
- 方案1:将按钮类型改为
请求数据格式问题:可以通过浏览器开发者工具的Network面板,查看请求的Form Data是否包含
Id字段。如果数据没有被正确发送,可能是Content-Type不匹配(ASP.NET Core默认仅解析application/x-www-form-urlencoded格式的表单数据),需要确认提交时的请求头和数据格式是否符合要求。
内容的提问来源于stack exchange,提问作者pikk
相关产品推荐
相关产品推荐

