2010-08-22 153 views
2

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

我的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"); 
} 

我一直在敲打我对这个的头,看了太多的网页搜索,但仍然无济于事。任何帮助将不胜感激。

回答

1

我会使用jquery form plugin,让你这样做你推荐:

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

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

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

如果你不希望使用任何其他插件可以确保您这样做(请注意,为了调用serialize方法,form被包装在$()中):

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

您可以在动作测试这个

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

就像@Akyegane的解决方案,但我会做到这一点

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

谢谢, 我浏览了jQuery验证的网站,它说:尝试这样的事情:

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

我做了,它的作品。表单提交正确的,但我在萤火得到这个错误:

$(形式).ajaxSubmit不是一个函数

我GOOGLE了一堆网站,有没有解决方案。我应该使用jQuery表单插件而不是jQuery验证吗?我正在使用最新的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