来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC

Posted

技术标签:

【中文标题】来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC【英文标题】:ajax data post from pop up form not hitting the controller method ASP.NET MVC 【发布时间】:2020-04-28 17:56:16 【问题描述】:

我有一个弹出表单AddorEdit.cshtml,它是从index.cshtml 页面调用的。表单正在打开,但无法将数据发布到控制器方法。

索引页面

// index.cshtml //
<a class="btn btn-success" style="margin-bottom:10px;" onclick="PopupForm('@Url.Action("AddorEdit", "Vehicles")')"><i class="fa fa-plus"></i> Add New</a>
<table id="tbl_vehicle" class="table table-striped table-bordered" style="width:100%;" >
//table block
<script>
function SubmitForm(form)             
            $.ajax(
                type: "POST",
                url: form.action,
                data: $(form).serialize(),
                success: function (date) 
                    if(data.success)
                    
                        Popup.dialog('close');
                        dataTable.ajax.reload();
                    
                
            );
</script>

弹出表单

//AddorEdit.cshtml //

@using (Html.BeginForm("AddorEdit", "Vehicles", FormMethod.Post, new  onsubmit = "return SubmitForm(this)" ))
//form

控制器方法

// VehiclesController.cs //

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddorEdit([Bind(Include = "Id,VehicleType,Amount,RenewPeriod,Status")] Vehicle vehicle)


        if (ModelState.IsValid)
        
            if (vehicle.Id <= 0)
            
                vehicle.RegisteredDate = DateTime.Now;
                vehicle.RegisteredBy = "admin";
                db.Vehicle.Add(vehicle);
            
            else
            
                db.Entry(vehicle).State = EntityState.Modified;
            

            db.SaveChanges();
        
        return Json(new  success = true, message = "Saved Successfully" , JsonRequestBehavior.AllowGet);


我无法检测到数据未发布到控制器方法的原因。谢谢!!!

【问题讨论】:

您的浏览器控制台或事件查看器中是否有任何 javascript 错误? 您的SubmitForm 方法中的form 实例实际上是否包含表单详细信息?请求是否发送到正确的操作并带有正确的详细信息(在 QueryString 或 Body 中)?如果是这样,应该是 API 端点没有正确反序列化值的问题。 ajax.success 事件是否触发?如果您在操作中添加断点,它会命中吗? form.action 还有什么价值? @nischalinn 有一个错误success: function (date) date 更改为data。然后请测试您的问题是否已解决。谢谢!!! 【参考方案1】:
use like this in your Form,it will fix your problem

    @using (Html.BeginForm("AddorEdit", "Vehicles", FormMethod.Post, new  onsubmit = 
     "return SubmitForm(this)" ))
    
       @Html.AntiForgeryToken()
    

如果你正在使用

[ValidateAntiForgeryToken]

此属性位于您的操作方法之上 你必须使用

@Html.AntiForgeryToken()

在你看来

【讨论】:

以上是关于来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC的主要内容,如果未能解决你的问题,请参考以下文章

数据表 Ajax url 未命中控制器操作

MVC .NET 表单提交未命中控制器操作

Ajax 调用未命中 C# 方法后面的代码

控制器 ActionResult 方法参数未从 ajax 调用接收表单数据

Ajax 调用数据在 POST 期间未传递给控制器

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义