【问题标题】:Jquery serialize : trying to pass a form status to an ASP.NET MVC controller without submitting the formJquery 序列化:尝试将表单状态传递给 ASP.NET MVC 控制器而不提交表单
【发布时间】:2016-01-31 16:53:40
【问题描述】:

在 ASP.NET MVC 应用程序上工作。 一个表单有几个提交表单的按钮。 其中一个按钮需要在不提交表单的情况下将表单的控件状态发送到控制器。 我打算使用 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);
            }
        });
    }

我的控制器动作如下:

public ActionResult Search(FormCollection improItem)
{
}

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

如果我评论这一行:

data: formStatus ,

然后它确实调用了控制器方法,但 FormCollection improItem 参数当然没有值。 所以我想我没有正确地将数据传递给 Ajax,但我没有设法得到这个排序。

提前谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    所以底线:除非您确切知道自己在做什么,否则请让框架自行解决。

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

    public ActionResult Search(FormCollection improItem)
    

    与:

    public ActionResult Search(MyViewModel improItem)
    

    【讨论】:

    • 太棒了!!非常感谢达林 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多