我想了解JsonResult和Ajax.BeginForm的區別嗎?有人可以善舉舉出每一個的例子嗎?每個功能都可以通過JQuery來完成嗎?如果是這樣,怎麼樣?JsonResult和ajax.BeginForm的區別
感謝
我想了解JsonResult和Ajax.BeginForm的區別嗎?有人可以善舉舉出每一個的例子嗎?每個功能都可以通過JQuery來完成嗎?如果是這樣,怎麼樣?JsonResult和ajax.BeginForm的區別
感謝
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;
});
});
感謝您的答案。我已經嘗試過JQuery方式,但無法讓ajax表單發佈工作。 Ajax.BeginForm()方法非常乾淨。 – Skadoosh 2012-02-28 20:52:53