2010-08-22 152 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