javascript - Jquery序列化: trying to pass a form status to an ASP. NET MVC Controller 而不提交表单

标签 javascript c# jquery ajax asp.net-mvc

正在处理 ASP.NET MVC 应用程序。 一个表单有几个提交表单的按钮。 其中一个按钮需要在不提交表单的情况下向 Controller 发送表单的控件状态。 我打算使用 Ajax 和 $('#FormID').serialize();

我是这样写的:

  function rechercher() {
        var formStatus = $('#FormID').serialize();

        var url = '@Url.Action("Search", "ImproItemForm"); //?'+ formStatus;
        // alert('formStatus: ' + formStatus); //works fine
         alert('url: ' + url);

        $.ajax({
            url: url,
            type: 'POST',
            dataType: 'json',
            data:/* { improItem: formStatus },*/  formStatus ,
            contentType: "application/json; charset=utf-8", 
            success: function (result) {
                   alert("success" + result);
            },
            error: function (result) {
                   alert("failure" + result);
            }
        });
    }

我的 Controller 操作如下:

public ActionResult Search(FormCollection improItem)
{
}

如果我以这种方式调用 ajax,它永远不会到达 Controller (因此会触发错误函数。

如果我评论这一行:

data: formStatus ,

然后它会调用 Controller 方法,但 FormCollection improItem 参数当然没有值。 所以我想我没有将数据正确传递给 Ajax,但我没有设法对其进行排序。

提前致谢。

最佳答案

确保您指定了正确的内容类型。现在你似乎已经指定了 application/json; charset=utf-8 但显然你没有发送任何 JSON 而是 application/x-www-form-urlencoded 这就是 .serialize() 方法将格式化表单值。所以只要去掉这一行:

contentType: "application/json; charset=utf-8",

通常当你不确定你正在发送或接收什么而不是像你那样尝试明确指定它时,你最好不要指定任何东西并让 jQuery 自己解决。 dataType: 'json', 属性当然也是如此。如果您的 Controller 操作不返回 JSON,则会导致错误。另一方面,如果您没有指定预期的返回类型,那么 jQuery 将简单地使用服务器返回的 Content-Type 响应 header ,并且它会计算出来。

所以底线是:除非您确切地知道自己在做什么,否则请将其留给框架来解决。

啊,在我忘记之前,请替换为:

public ActionResult Search(FormCollection improItem)

与:

public ActionResult Search(MyViewModel improItem)

关于javascript - Jquery序列化: trying to pass a form status to an ASP. NET MVC Controller 而不提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116490/

相关文章:

javascript - 如何从 JS 中的函数访问父对象 "this"?

javascript - 由于 AppCheck,我对 Firestore 的所有请求都被归类为未验证?

javascript - 在 chrome 扩展程序中显示警报对话框

c# - C# 上的 MySQL 连接超时

javascript - .load 加载速度不够快

jquery - 第一个 Accordion 面板与行中的其他面板不对齐

javascript - 获取 Canvas X 和 Y 坐标并显示在屏幕上

c# - 以编程方式将 10 个用户登录到远程桌面 session

c# - AOP(面向方面​​的编程)和日志记录。它真的很实用吗?

javascript - 滑动面板,如何复制它们?