1、簡介
大約在2006年年初,AJAX迅速成爲Web 2.0開發中的一個熱點,也成爲開發以用戶爲中心的Web應用程序事實上的標準。然而,要開發出高質量的AJAX應用程序,首先要求開發者是一名 JavaScript高手,並不得不使用一些遠不如C#或Java那樣完善的開發工具。所以,因爲AJAX「先天」的異步性及瀏覽器之間的差別,開發、調試及維護AJAX應用程序的過程將變得很是艱難並耗費大量時間。爲此,許多公司和我的爭相開發出本身的AJAX產品。但歸結來看,全部AJAX產品不外乎三大類型:回調框架、UI框架和完整框架。
第一,
回調框架。這類框架通常由少數的幾個客戶端及服務器端庫文件組成。它只容許開發者從客戶端調用服務器端代碼片斷,並以序列化方式傳送輸入和輸出參數。
第二,
UI框架。典型的UI框架通常都是從現有的專業控件庫演變而來,它們每每提供給開發者一些高級網格控件、圖表控件和樹控件,等等。這些控件都會支持異步回發機制並在客戶端生成用於自動刷新頁面的JavaScript代碼。
第三,
完整框架。相比於以上兩種框架,完整框架則提供包含控件和應用程序服務在內的極爲豐富的編程模型,更適宜於同時應用於客戶端和服務器端。微軟的ASP.NET AJAX框架屬於第三種類別。
微軟於2005年夏天着手開發本身的代號爲「ATLAS」的AJAX方案。因爲這個產品的開發過程採用了一種開放方式(與社團結合並徹底開放源碼),因此在短時間內出現多個CTP版本,並於2007年1月份,正式推出並改名爲ASP.NET AJAX 1.0(如下咱們簡稱爲「MS AJAX」),其官方支持網站爲
[url]http://ajax.asp.net[/url]。
2、MS AJAX的目標
◆
構建一套完整的Web用戶體驗框架—提供一組豐富的內置組件,並容許開發者方便地依照本身的須要加以擴展;所以,對於那些熟悉JavaScript腳本語言的開發者將極大地提升程序的可維護性和可重用性。
◆
與ASP.NET 2.0編程模型有機集成—提供一種端對端的解決方案,使得MS AJAX應用程序可以很是容易地訪問服務器端ASP.NET和.NET框架中現有的編程模型。
◆
自由選擇開發模型—實際開發中,開發人員能夠根據須要選擇以服務器端爲中心仍是以客戶端爲中心做爲應用程序的基本開發模型。
◆
徹底跨平臺並基於標準—兼容大多數瀏覽器和平臺,它實現的MS AJAX腳本框架可以適用於任何流行的Web服務器。
◆
零客戶端安裝—運行基於MS AJAX開發的應用程序時,不須要客戶端安裝任何內容。MS AJAX的「客戶端」由一系列從瀏覽器下載到本地的JavaScript文件組成。
此外,MS AJAX框架還能夠應用於PHP及ColdFusion等Web開發環境中。
3、MS AJAX體系結構
從整體上看,整個ASP.NET AJAX框架被劃分爲以下三個模塊:
一、
ASP.NET AJAX。這一部分是ASP.NET AJAX框架的核心部分,包括了核心AJAX類型系統,網絡協議層,組件模型,擴展器基類,以及與ASP.NET集成的服務器端功能。
二、
ASP.NET AJAX CTP。ASP.NET AJAX社區支持的「增值」CTP部分,包括了之前各個Atlas CTP版本包含的,但並不在徹底支持的「核心」1.0版本內的額外的高級特性。微軟的最終目標是,經過用戶進一步的試用與反饋,逐步將其中穩定的部分增長到核心模塊中去。
篇幅所限,在此咱們略去對ASP.NET AJAX框架的安裝介紹,具體請參考ASP.NET AJAX的官方網站。
服務器端主要技術
ASP.NET AJAX的主要設計目標有兩點:(1)擴展示有的ASP.NET服務器端模型,讓其可以自動生成支持富客戶端的JavaScript代碼;(2)爲ASP.NET增長客戶端編程模型,進一步簡化客戶端編程。
由此,整個ASP.NET AJAX框架實質上包含了兩種大相徑庭(但不互相排斥)的API:客戶端API和服務器端API。你能夠經過直接的客戶端編程、傳統服務器端編程或這二者的任意組合構建AJAX應用。本質上,任何基於AJAX的頁面都須要一些客戶端JavaScript代碼來處理瀏覽器的文檔對象模型(DOM)和任何特定於應用程序的擴展。可是,沒必要將這類腳本代碼編寫工做留給ASP.NET程序員。事實上,框架可生成專門設計的腳本代碼做爲服務器端控件的輸出。這種形式的間接頁面更新是目前爲止將AJAX功能添加到新的和現有的ASP.NET 2.0頁面的最簡單方法。在ASP.NET AJAX中,頁面更新可由服務器控件(UpdatePanel控件)所自動插入的一段客戶端代碼來管理。
下圖1展現了ASP.NET AJAX框架的服務器端架構。
![](http://static.javashuo.com/static/loading.gif) |
圖1:ASP.NET AJAX服務器端架構 |
ASP.NET AJAX框架中提供了本身的相似於ASP.NET服務器控件的MS AJAX服務器控件;可是,MS AJAX服務器控件卻具備可以生成客戶端JavaScript腳本的能力。所以,MS AJAX服務器控件進一步簡化了產生MS AJAX客戶端JavaScript腳本的過程,很是適合於專一於服務器開發的開發人員。MS AJAX包含了完整的服務器控件,如Button、Label、Option、TextBox、CheckBox、HyperLink和 Validator等,這些控件與現有的ASP.NET服務器控件很是相似。全部這些控件都會被無縫地集成進Visual Studio開發環境,因此,你能夠如同使用ASP.NET服務器控件通常使用它們。
這一部分中,有兩個最主要的服務器端控件:ScriptManager和UpdatePanel。在此,咱們僅做簡要介紹。
ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它管理頁面上的全部組件以及頁面的局部更新,生成相關的客戶端代理腳本以便可以在JavaScript中訪問Web服務,全部須要支持ASP.NET AJAX的ASP.NET頁面上有且只能有一個ScriptManager控件。在這個ScriptManager控件中,咱們能夠指定須要的腳本庫,或者指定經過JavaScript來調用的Web服務,還能夠指定頁面錯誤處理方式等。
UpdatePanel控件表明ASP.NET AJAX以服務器爲中心的編程模型的中心。它容許你執行服務器端代碼並將已更新標記返回到客戶端瀏覽器。其與傳統的回發機制存在的區別在於,傳統的回發是整頁刷新,而UpdatePanel控件會設法發送一個頻帶外請求以取得刷新標記,並在響應就緒後更新特定部分的DOM樹(即局部刷新)。
所以,UpdatePanel將是用來改造現有ASP.NET 2.0程序的重型武器,其強大之處在於不用編寫任何客戶端腳本,只要在一個頁面上添加幾個UpdatePanel控件和一個ScriptManager控件就能夠自動實現局部更新。
下表列出了UpdatePanel控件中的經常使用重要屬性:
屬性 |
說明 |
ChildrenAsTriggers |
當UpdateMode屬性爲Conditional時,UpdatePanel中的子控件的異步回送是否會引起UpdatePanle的更新。 |
RenderMode |
表示UpdatePanel最終呈現的HTML元素。Block(默認)表示<div>,Inline表示<span>。 |
UpdateMode |
表示UpdatePanel的更新模式,有兩個選項:Always和Conditional。Always是指無論有沒有Trigger其餘控件都將更新該UpdatePanel;Conditional表示只有當前UpdatePanel的Trigger或ChildrenAsTriggers 屬性爲true時當前UpdatePanel中控件引起的異步回送或者整頁回送或是服務器端調用Update()方法纔會引起更新該 UpdatePanel。 |
注意,UpdatePanel的工做依賴於ScriptManager服務端控件和客戶端PageRequestManager類(Sys.WebForms.PageRequestManager)。當ScriptManager中容許頁面局部更新時,它會以異步的方式回傳給服務器,與傳統的整頁回傳方式不一樣的是隻有包含在UpdatePanel中的頁面部分會被更新,在從服務端返回HTML以後, PageRequestManager會經過操做DOM對象來替換須要更新的代碼片斷。
關於ASP.NET AJAX Control Toolkit
◆數十種提供經常使用AJAX功能的服務器端組件及源碼;
◆演示上述組件的示例Web站點;
◆開發基於ASP.NET AJAX自定義服務器端組件的Visual Studio 2005項目模板;
◆測試上述組件及自定義組件的Web站點。
客戶端主要技術
ASP.NET AJAX以客戶端爲中心的編程模型的重心是支持遠程端點(一般爲ASP.NET Web服務和Windows通信基礎服務,但也多是其它內容)調用的能力。直接從客戶端瀏覽器啓動時,對遠程端點的調用須要JavaScript代理和 JavaScript代碼片斷。注意,咱們能夠把「客戶端數據綁定」視爲傳統JavaScript運行時和DOM的擴展。在純粹的客戶端編程風格中,首先會鏈接到遠程端點,而後下載數據,並將數據綁定到DOM子樹。此時,模板結構和一些狀態信息保存在客戶端上,只有原始數據從服務器移動到客戶端上。
下圖2展現了ASP.NET AJAX框架的客戶端架構。
![](http://static.javashuo.com/static/loading.gif) |
圖2:ASP.NET AJAX客戶端框架 |
MS AJAX客戶端腳本庫是由一些JavaScript(.js)文件組成的,而且提供了面向對象的JavaScript特性極大地簡化了程序開發。從上圖2看出,MS AJAX客戶端腳本庫包括:
一、
瀏覽器兼容層—爲MS AJAX腳本提供了跨瀏覽器的兼容性。
二、
MS AJAX核心服務—包含了一些JavaScript擴展,如類、命名空間、事件處理、繼承、數據類型與對象序列化。
三、
MS AJAX基礎類庫—包含StringBuilder、Debugger、Timer、Tracing等新組件。
四、
網絡層—負責處理與Web服務及應用程序之間的溝通,以及管理異步遠程方法調用。
五、
UI層—提供一些MS AJAX客戶端的能力,包括行爲(Behavior)、MS AJAX聲明性語法、UI組件及數據綁定。
六、
MS AJAX控件層—爲客戶端開發提供了特定MS AJAX控件,這些控件能具備數據綁定、腳本化、綁定到MS AJAX行爲如拖放功能等等,這一層包含如常規類型控件(對應於HTML經常使用控件)、具備數據綁定能力的ListView控件,以及數據導航控件。
4、使用ASP.NET AJAX框架的三種實現方案
(一)改造現有的ASP.NET 2.0應用程序
這種狀況針對咱們已經擁有一個具備完整功能的ASP.NET 2.0應用程序的狀況,可是,因爲系統性能及用戶體驗等各類緣由須要對這種程序進行AJAX「再改造」。理由很簡單:一方面,MS AJAX客戶端實現方案與現有ASP.NET 2.0服務器編程模式存在顯著區別;另外一方面,咱們也根本不可能再次重寫已經相對完備的現有的程序邏輯。此時,選擇使用MS AJAX服務器端實現方案對這種程序進行改造是最佳選擇—幾乎不費一槍一彈就能夠把現有應用程序AJAX化。例如,典型的要求局部頁面更新的狀況,只須要咱們使用MS AJAX服務器端控件UpdatePanel把這一部分加以「封裝」包圍便可爲現有應用添加AJAX功能。
【建議】若是你的團隊不擅長JavaScript,或者你但願將公開給客戶端編程的信息降到最少,則可以使用此方案。此外,若是你須要保護應用程序中任何敏感的業務邏輯,也建議使用此方案。
(二)從頭建立‘純’ASP.NET AJAX應用程序
對於一切從頭開始建立基於ASP.NET 2.0服務器端平臺的狀況,則要考慮使用這種方案。便是,全部實現都使用MS AJAX客戶端JavaScript編程及xml-script聲明式編程來實現。儘管這種開發方案仍存在至關的難度(沒有現成的優秀IDE支持,並且調試技術也基本依賴於手工,更要求開發人員具有嫺熟的JavaScript編程技巧等),但卻可以爲系統帶來全方位的性能優化。
(三)在非ASP.NET 2.0服務器端平臺上開發基於ASP.NET AJAX框架的應用程序
當你須要AJAX應用程序的現代型跨瀏覽器版本時,可使用MS AJAX客戶端實現方案。不過,沒有了MS AJAX服務端實現的支持,咱們仍然能夠開發出一流的AJAX應用程序。
【注意】此方案下,部分客戶端數據綁定建議使用徹底用AJAX JavaScript編寫的兩個客戶端控件(分別是用於多記錄視圖的ListView和用於單記錄視圖的ItemView)以實現基於模板的數據綁定。這兩個控件和客戶端數據源以及篩選組件組合在一塊兒。綁定客戶端數據後,固然,最後獲得的頁面包括一厚層的JavaScript和/或XML Script,但沒有任何託管代碼(腳本管理器控件除外)。調用經過JSON數據流以獨立於類型的方式移動輸入參數和接收返回值。要觸發多種服務端調用並將更改應用於客戶端,須要強類型化JavaScript代碼。當你須要使用以異步方式觸發和控制遠程操做的智能客戶端時,建議使用此方法。此方法須要 JavaScript編碼來處理返回值和更新當前DOM中任何受結果影響的部分。
總之,根據以上分析,任何一種MS AJAX實現方案都不是絕對獨立的,而是相輔相成。例如,在全部實現方案下,咱們都要依賴於MS AJAX服務器端ScriptManager控件來負責向瀏覽器端發送MS AJAX客戶端框架所必需的JavaScript代碼等。
5、MS AJAX框架學習參考資料
6、總結
在本文中,咱們僅粗略地向讀者介紹了微軟ASP.NET AJAX框架的大體架構及整體功能,沒有深刻其中,更沒有給出現成的案例。在之後的文章中,我會逐漸整理出基於這個框架的實戰案例供讀者參考。
總的來看,MS AJAX的總體框架如今已經基本成熟,可是在許多方面還須要做進一步的改進。若是您想基於ASP.NET 2.0平臺進行Web開發,不學習MS AJAX框架是沒有理由的,由於這是大勢所趨;所以,宜早下手爲妥。