2012-02-28 74 views
2

我想了解JsonResult和Ajax.BeginForm的區別嗎?有人可以善舉舉出每一個的例子嗎?每個功能都可以通過JQuery來完成嗎?如果是這樣,怎麼樣?JsonResult和ajax.BeginForm的區別

感謝

回答

11

JsonResult只是一種ActionResult派生類中表示,這一行動將返回,而不是一個視圖或別的東西JSON。

例如:

public ActionResult Foo() 
{ 
    var model = new MyViewModel 
    { 
     Foo = "bar" 
    }; 
    return Json(model); 
} 

該控制器的動作,當被調用時,則返回模型的JSON序列化表示:

{"Foo":"bar"} 

除此之外它設置Content-Type HTTP響應報頭以application/json

Ajax.BeginForm是一個HTML助手,用於生成<form>元素,但將使用AJAX將其提交給服務器。因此,如果您將此表單指向返回JSON的控制器操作,您將能夠在成功回調中檢索此JSON的結果。結果將被自動分析爲一個JavaScript對象,您可以訪問其屬性。

例如:

@using (Ajax.BeginForm("foo", "home", new AjaxOptions { OnSuccess = "onSuccess" })) 
{ 
    @Html.EditorFor(x => x.SomeProperty) 
    <button type="submit">OK</button> 
} 

這將生成一個<form>元件時提交Foo動作將發送一個AJAX請求。對於這個工作,你需要包括下面的腳本到你的頁面:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

現在,所有剩下的就是寫這onSuccess javascript函數和處理由服務器返回的JSON結果:

<script type="text/javascript"> 
    var onSuccess = function(result) { 
     alert(result.Foo); 
    }; 
</script> 

每個功能都可以通過JQuery來完成嗎?

在幕後當包括jquery.unobtrusive-ajax.js,與Ajax.*助手生成的所有形式或鏈接將被自動解析和Ajax化與jQuery。這些助手生成的HTML5 data-*屬性將被處理並轉換爲AJAX調用。

你當然可以決定使用普通的jQuery而不是Ajax.*幫手。在這種情況下,您不需要包含jquery.unobtrusive-ajax.js腳本。你不需要使用任何Ajax。*助手。

要生成,你可以使用普通Html.BeginForm幫手形式:

@using (Html.BeginForm("foo", "home", FormMethod.Post, new { id = "myform" })) 
{ 
    @Html.EditorFor(x => x.SomeProperty) 
    <button type="submit">OK</button> 
} 

,然後在JavaScript文件中使用jQuery訂閱.submit活動這種形式,通過返回false取消默認同步提交和發送一個AJAX請求,而不是:

$(function() { 
    $('#myform').submit(function(){ 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function(result) { 
       alert(result.Foo); 
      } 
     }); 
     return false; 
    }); 
}); 
+0

感謝您的答案。我已經嘗試過JQuery方式,但無法讓ajax表單發佈工作。 Ajax.BeginForm()方法非常乾淨。 – Skadoosh 2012-02-28 20:52:53