MVC Post Json错误

时间:2010-08-22 10:22:01

标签: jquery asp.net-mvc

我尝试向MVC操作发布帖子并在网页上显示生成的JSON。该操作接收post命令,但结果显示在新页面上,而不是同一页面上。例如,它会询问我是否要下载或打开该文件。 PS。我也在使用jQuery验证。

我的jquery:

submitHandler: function(form) {
                    $('#loading').show();  //adds waiting spinner
                    $.post(
                        $(form).attr('action'),
                        form.serialize(),
                        function(data) {
                            alert(data);
                        },
                        "json"
                    );
                    return false;
                }

我的行动:

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
public ActionResult ContactUs(FormCollection collection) {
    ...
    return Json("OK");
}

我一直在敲打这个问题并且读过太多的网页搜索,但仍无济于事。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

我建议您使用允许您执行此操作的jquery form plugin

submitHandler: function(form) {
    $('#loading').show();  //adds waiting spinner
    $(form).ajaxSubmit();
}

您还可以将选项传递给ajaxSubmit方法:

$(form).ajaxSubmit({
    success: function(data) {
        alert(data);
    }
});

如果您不想使用任何其他插件,请务必执行此操作(请注意form已包含在$()中以便调用serialize方法):< / p>

$.post(
    form.action,
    $(form).serialize(),
    function(data) {
        alert(data);
    },
    'json'
);

答案 1 :(得分:0)

你可以在行动中测试这个

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
public ActionResult ContactUs(FormCollection collection) {
...
return new JsonResult() { data = "OK"};
}

答案 2 :(得分:0)

就像@Akyegane解决方案一样,但我会这样做

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
public ActionResult ContactUs(FormCollection collection) {
    return Json({ data = "OK"});
}

答案 3 :(得分:0)

谢谢, 我正在浏览JQuery验证网站,它说要尝试这样的事情:

            submitHandler: function(form) {
                $(form).ajaxSubmit();
        }

我做了,它有点工作。表单正确提交,但我在FireBug中收到此错误:

$(form).ajaxSubmit不是函数

我搜索过一堆网站,但没有解决方案。我应该使用jquery表单插件而不是jquery validate吗?我正在使用最新的jquery和Jquery通过以下方式验证CDN包:

http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
http://ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js