使用 ASP.NET AJAX Extensions 將您的網站過渡到 AJAX 體驗時,有兩個主要的編程模型可供選擇:部分呈現和指令碼服務。在上個月的專欄中,我主要從體繫結構的角度論述了部分呈現。簡而言之,使用部分呈現,您無需更改 ASP.NET 應用程式的底層體繫結構——它是實現 AJAX 某些最佳元素(如網站頁面的無閃爍更新)的便捷途徑。實現此類改進行為只需添加一些新的伺服器控制項(特別是 ScriptManager 和 UpdatePanel),並讓它們悄悄地施展一些技巧,通過 XMLHttpRequest 對象啟動並執行非同步請求來轉換傳統的回傳。此方法很容易實現,因為它只是將 AJAX 功能應用於現有的 Web 開發模型。
如果您準備對構建 AJAX 應用程式實行全面的模式轉換,那麼就應該瞭解一下指令碼服務的方法。總的來說,典型的 AJAX 體繫結構相當容易理解。圖 1 展示了其工作原理的高層視圖。其中有一個由應用程式特定服務組成的後端,通常只是可調用 AJAX 指令碼的外層,其下方是商務邏輯所在和發揮作用的系統中介層。服務與前端通過 HTTP 交換資料,使用多種格式傳遞參數和傳回值。前端由運行於用戶端上的 JavaScript 程式碼群組成,在接收和處理完資料後,它面臨著使用 HTML 和 JavaScript 構建圖形化使用者介面的重大任務。對 JavaScript 的依賴是由於受瀏覽器結構的限制,只有當瀏覽器可以支援功能更加強大的編程功能時,這種情況才會改變。
圖1典型的 AJAX 體繫結構
通過 AJAX 登入
拋棄傳統的 ASP.NET 模型會引起許多實際反響。考慮一下登入過程,看看在純 AJAX 解決方案中會發生怎樣的變化。
當前對 ASP.NET 來說,啟用登入過程包括:用 Login 控制項配置登入頁面,用 LoginView 控制項配置受保護的頁面,設定 ASP.NET 成員資格提供者。受保護的頁面將使用登入模板或匿名模板以圖形方式反映身分識別驗證過程的結果。在 ASP.NET 2.0 中,您無需編寫任何代碼即可完成大部分此類工作。要成功地進行登入,需要有使用者到達受保護頁面時發生的重新導向 (HTTP 302)、從登入頁面到身分識別驗證憑據的回傳,然後是回到原先請求頁面的另一次重新導向。
對於 AJAX 頁面來說則並不一定如此。如果使用者從地址欄請求一個受保護的頁面,除了重複 ASP.NET 的曆程之外,您並不能做什麼。不過,如果您在頁面中有指向受保護頁面的連結,則可以將某些指令碼添加到該連結的 onclick 事件上,以檢查使用者是否已通過身分識別驗證。如果沒有,則可以彈出一個警告框以提醒使用者,如下所示:
function checkFirst()
{
var loggedIn = Sys.Services.AuthenticationService.get_isLoggedIn();
if (!loggedIn)
{
alert("You must be logged in to follow this link");
return false;
}
return true;
}