在ASP.NET MVC編程中使用AJAX功能是非常簡單的。藉助於JQuery架構,你還可以增加其他的優秀特徵並且使AJAX調用特別簡單。本文中,我們將探討這方面的編程內容。
一、檢測一個AJAX請求
在Web表單中,建立AJAX請求典型的方法是使用一個更新面板。當更新面板回寄時,ScriptManager提供一個方法(通過其 isInAsyncPostBack屬性)來檢測伺服器上的AJAX回寄。ASP.NET MVC也提供了類似的機制。因為AJAX能夠調用行為方法,所以我們需要一種方法來檢測一個請求是否是標準的GET/POST操作,還是一個AJAX請求。
我們可以使用一個有用的擴充方法來實現上述檢測,這隻需調用Request.IsAjaxRequest()方法即可。我們知道,一個Web請求是一個針對HttpRequestBase(針對.NET架構HttpRequest對象的一個封裝器)的引用,它也是一個控制器的屬性。故而,我們可以使用IsAjaxRequest()方法來檢查請求資訊,以確保正在向伺服器發出一個AJAX請求。通過這種方式,我們可以正確地檢測出當前請求是一個 ASP.NET請求還是一個jQuery請求。
要實現上述這一點,只需要在你的行為方法中添加下面的代碼。
清單1—檢測一個AJAX請求
if (Request.IsAjaxRequest())
//AJAX request
else
//Standard request
為什麼檢測一個AJAX請求如此重要呢?因為根據行為方法所實現的任務我們處理AJAX請求的方式不同於標準的請求。我們很快會看到這樣的例子。
二、使用Ajax表單
微軟提供了一組AJAX擴充集,其中之一便是Ajax表單。通過此Ajax表單,可以向伺服器發出非同步請求並提供相關的響應內容。用戶端所有的AJAX調用機制都包含在一個MicrosoftMVCAjax指令碼內。清單2給出了一個簡單的Ajax表單樣本。
清單2:使用AJAX.BeginForm擴充
<% using (Ajax.BeginForm("AjaxCustom", new AjaxOptions { UpdateTargetId = "customresponse" })) { %>
Name: <%= Html.TextBox("CustomName")%>
Value: <%= Html.TextBox("CustomValue")%>
<% } %>
上述AJAX表單處理回寄的細節,並使用JavaScript以非同步方式執行,而不是執行一個到伺服器端的標準HTTP回寄。在清單2中,表單把資料回寄到AjaxCustom行為方法,並把表單的值傳遞過去,最後得到返回的響應內容並以某種方式來使用這個結果。
接下來,在行為方法中你可以使用非常現成的Request.IsAjaxRequest方法:
清單3:處理可能的Ajax回寄並提供響應
[HttpPost]
public ActionResult AjaxCustom(FormCollection post)
{
if (Request.IsAjaxRequest())
return Content("Success");
else
return RedirectToAction("Index");
}
如果是一個AJAX請求,則把一個特殊的字串傳遞迴用戶端,並進行相應處理。這一行為是受AjaxOptions集合控制的。上面的清單2中把字串“Success”注入到一個id為“customresponse”的HTML元素中。如果由於某種原因,該請求不是來自一個AJAX調用,行為方法仍可以正常工作—重新導向到另一個視圖中。我們將在以後的文章中討論這些情況。
上面我只是簡要地介紹了使用MS Ajax的情況,因為我相信最好的AJAX方案是當屬使用JQuery。