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

ASP.NET Core MVC地址验证模态框视图传控制器模型为空如何解决

问题根因

你遇到的控制器接收模型为null的问题,核心是两个原因:

  1. 你在@Url.Action中直接传入的是页面首次渲染时的初始Model,此时用户还未输入内容,后续用户在表单填写的内容不会动态更新到按钮的data-url属性中,请求时携带的永远是初始的空模型。
  2. 用GET请求传递复杂结构的模型,很容易出现参数绑定失败的问题,且GET请求有参数长度限制。

修复步骤

  • 第一步:给表单套上form标签
    你现有的表单元素没有被form标签包裹,后续序列化表单数据会失败,找到视图中<div class="form-horizontal">的位置,在外面套上form标签:
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        <!-- 原有所有表单内容、验证提示、按钮都保持不变 -->
    </div>
}
  • 第二步:修改校验按钮的属性
    删除按钮data-url里的模型参数,仅保留基础的请求地址:
<button type="button" class="btn btn-primary" data-toggle="ajax-modal" data-target="#ValidateAddress" data-url="@Url.Action("GetValidationOnAddress")">Verify Address</button>
  • 第三步:修改AJAX请求逻辑
    改为POST请求,同时序列化当前表单的用户输入内容传递给控制器,修改你的script部分代码:
$(function () {
    var PlaceHolderElement = $('#PlaceHolderHere');
    $('button[data-toggle="ajax-modal"]').click(function (event) {
        var url = $(this).data('url');
        // 序列化当前表单的所有用户输入数据
        var postData = $('form').serialize();
        // 发送POST请求到控制器
        $.post(url, postData).done(function (data) {
            PlaceHolderElement.html(data);
            PlaceHolderElement.find('.modal').modal('show');
        })
    })
})
  • 第四步:调整控制器方法适配POST请求
    确认你的GetValidationOnAddress方法添加了POST请求接收注解,参数为对应的地址模型:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetValidationOnAddress(DeliveryAddressModel model)
{
    // 原有FedEx地址校验逻辑不变
}

调整后控制器就能正常接收到用户填写的表单内容了,地址校验完成后返回模态框内容即可实现无刷新弹出确认的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:01