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

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>&nbsp;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())。
  • 请求数据格式问题:可以通过浏览器开发者工具的Network面板,查看请求的Form Data是否包含Id字段。如果数据没有被正确发送,可能是Content-Type不匹配(ASP.NET Core默认仅解析application/x-www-form-urlencoded格式的表单数据),需要确认提交时的请求头和数据格式是否符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:33:18