ASP.NET AJAX 在Web開發中的應用

ASP.NET AJAX 實現了Web頁面豐富的部分刷新效果。本文通過介紹AJAX原理,引申到ASP.NET AJAX原理,並總結了在Web 開發應用中要注意的若干問題。合理地利用ASP.NET AJAX技術,Web開發應用就能獲得更好的交互效果。

關鍵詞 ASP.NET AJAX Web開發 ASP.NET AJAX控件

1 引言

 當前,Web技術的不斷髮展使得B/S得以廣泛地應用。但Web傳統的開發技術使得網頁的交互性能大打折扣。隨着AJAX技術的興起,Web開發技術超越了傳統的開發模式,發生了質的飛躍。而微軟公司推出的ASP.NET AJAX框架與ASP.NET的結合,使得Web的開發方式在.NET環境下更加簡單易用,頁面交互性能也得到很大提高。

 2 Ajax引擎的原理

AJAXAsynchronous JavaScript and XML)是現有多種技術的綜合,包括JavaScriptXHTMLCSSDOMXMLXSTLXMLHttpRequestAJAX使用XHTMLCSS標準化呈現數據,使用DOM實現動態顯示和交互數據,使用XMLXSTL進行數據交換與處理,使用XMLHttpRequest對象進行異步數據讀取,使用JavaScript綁定和處理所有數據。AJAX爲交互操作較多、數據讀寫頻繁和數據分類良好的Web應用提供了一個很好的解決方案。其中XMLHttpRequestJavaScriptDOMAJAX技術的核心。

2.1 XMLHttpRequest XMLHttpRequestAJAX引擎的核心技術,是AJAX引擎解決無需刷新整個頁面即可從服務器獲取所需數據問題的關鍵。在微軟IE 平臺下XMLHttpRequest XMLHTTP 組件的一個對象,它通過允許開發人員在Web 頁面內部使用XMLHTTP ActiveX 組件擴展自身功能,開發人員不必從當前的Web 頁面導航而直接與服務器上的數據庫進行雙向數據傳輸。該項功能相當重要,它彌補了無狀態連接的缺點,排除下載冗餘Web 數據的需要,從而提高了進程速度。

 2.2 DOM ( Document object Model ) DOM 是給HTML XML 文件使用的一組API。它提供了文件的結構表述,允許開發人員改變其中的內容,建立網頁與程序語言溝通的橋樑。所有Web 開發人員操作及建立文件的屬性、方法及事件都以對象方式來展現,這些對象均可由當今大多數瀏覽器以腳本取用。一個用HTML XHTML 構建的網頁可看作是一組結構化數據,這些數據被封在DOM (Document Object Model)中,且DOM 提供對網頁中各個對象的讀寫支持。

2.3 JavaScript JavaScript是一種在瀏覽器中大量使用的跨平臺編程語言,常被用來製作網頁特效或表單驗證。在AJAX JavaScript 則是XMLHttpRequestDOM 交互的橋樑以及AJAX 引擎工作的主要推動力。JavaScript 通過調用XMLHttpRequest 的屬性和方法獲取服務器端數據,調用DOM API更新Web 頁面內容,從而實現整個頁面的無刷新更新頁面的效果。

 3 ASP.NET AJAX架構

ASP.NET AJAX由客戶端腳本庫和服務端組件組成,這兩者被集成在一起提供了一個功能強大的開發框架。客戶端腳本庫中包含兩種最熟悉的動態網頁技術,分別是跨瀏覽器使用的ECMAScript(JavaScript)技術和動態的HTML (DHTML)網頁開發技術,並且將這兩種技術集成到了ASP.NET 2.0 基於服務器端的開發平臺中。圖1解釋說明了包含客戶端腳本庫和服務端組件的ASP.NET AJAX的功能。

3.1 ASP.NET服務器端架構 ASP.NET服務器端組件由ASP.NET控件和組件構成,用於管理UI和應用程序流,管理序列,驗證和控件擴展性等。此外,ASP.NET Web服務也能用於訪問ASP.NET應用服務,包括窗體驗證和用戶驗證。

3.2 ASP.NET服務器控件 ASP.NET AJAX控件由服務器端和客戶端代碼構成在一起以產生類似於AJAX的行爲。以下是最常用的ASP.NET AJAX控件。 ●ScriptManager控件 ●UpdatePanel控件 ●UpdateProgress控件 ●Timer控件

3.3 ASP.NET AJAX客戶端架構 ASP.NET AJAX客戶端腳本庫由JavaScript(.js)文件構件。這些.js文件提供了面向對象開發的特性。這一特性使得連續性和模塊化在客戶端腳本中達到一個新的層次。以下是ASP.NET AJAX中客戶端的各個層次。 瀏覽器的兼容層。通過最常用的瀏覽器爲ASP.NET AJAX腳本提供兼容性。 ASP.NET AJAX 核心服務,這種核心服務已經擴展到了JavaScript。例如classesnamespacesevent handlinginheritancedata typesand object serialization ASP.NET AJAX基礎類庫,包括組件如string builders and extended error handling 網絡工作層。該層用於處理基於Web服務和應用之間的通信,管理異步式遠程方法的調用。

 1 ASP.NET AJAX服務器和客戶端架構

4 ASP.NET AJAXWeb開發中的應用

4.1 ASP.NET AJAX開發環境 2 ASP.NET AJAX服務器控件 Web開發應用中,利用VS2005開發工具和ASP.NET AJAX1.0框架進行Web頁面的開發是值得推薦的一種方法。VS2005開發工具本身並沒有集成這一框架,因此,在做Web開發時就必須安裝這一框架。可以從微軟官方網站上下載(www.asp.net)。下載安裝後,可在VS2005開發環境中看到ASP.NET AJAX服務器控件。如圖2所示。 要注意的是,安裝ASP.NET AJAX框架後,並不是VS2005開發環境中的所有頁面模板都能支持AJAX技術。只有ASP.NET AJAX提供的默認模板才能支持。對於其他ASP.NET模板,如果要想支持AJAX,就必須配置Web.config文件。具體配置可以參考微軟官方文檔。

4.2 ASP.NET AJAX控件在Web開發中的應用

4.2.1 ScriptManager控件 用來處理頁面上的所有組件以及頁面局部更新,生成相關的客戶端代理腳本以便能夠在JavaScript中訪問Web Service,所有需要支持ASP.NET AJAXASP.NET頁面上有且只能有一個ScriptManager控件,並且,如果要使用其他ASP.NET AJAX控件,就必須要有ScriptManager控件的支持。在ScriptManager控件中我們可以指定需要的腳本庫,或者指定通過JS來調用的Web Service,還可以指定頁面錯誤處理等。使用<aspScriptManager/>來定義一個ScriptManager,簡單的ScriptManager定義形式是: <aspScriptManager ID="ScriptManager1" runat="server"> <AuthenticationService Path="" /> <ProfileService LoadProperties="" Path="" /> <Scripts> <aspScriptReference/> </Scripts> <Services> <aspServiceReference /> </Services> </aspScriptManager>

默認情況下,ScriptManager控件爲頁面中的微軟腳本庫註冊腳本。以使客戶端腳本庫進行各種系統擴展,並且支持局部頁面刷新和Web Services回調的特性。在Web應用開發中,ScriptManager控件是必須的。要使用ASP.NET AJAX控件,每個.aspx頁面上必須有且只有一個ScriptMangeger控件。當.aspx頁面與母版頁結合作爲內容頁使用時,只須在母版頁上放置一個ScriptManger控件,內容頁上無須再放該控件。 值得注意的是,頁面上任何用ScriptManger控件註冊的腳本和所有事件處理腳本都必須在頁面<form>元素內。否則腳本將不會被註冊或者被執行。

 4.2.2 UpdatePanel控件 該控件可以用來創建豐富的局部更新Web應用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一個控件,其強大之處在於不用編寫任何客戶端腳本,只要在一個頁面上添加幾個UpdatePanel控件和一個ScriptManager控件就可以自動實現局部更新。一個頁面上可以放一個或者多個UpdatePanel控件,並且UpdatePanel控件還可以嵌套使用。UpdatePanel的工作依賴於ScriptManager服務端控件和客戶端PageRequestManager類。當ScriptManager中允許頁面局部更新時,它會以異步的方式回傳給服務器,與傳統的整頁回傳方式不同的是隻有包含在UpdatePanel中的頁面部分會被更新,在從服務端返回HTML之後,PageRequestManager會通過操作DOM對象來替換需要更新的代碼片段。UpdatePanel的工作原理如圖3如示。

 3 UpdatePanel的工作原理圖

簡單的UpdatePanel定義如下: <aspUpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> </ContentTemplate> <Triggers> <aspAsyncPostBackTrigger /> <aspPostBackTrigger /> </Triggers> </aspUpdatePanel> <ContentTemplate>標籤用來定義UpdatePanel的內容,在它裏面可以放任何ASP.NET元素。<Triggers>屬性有兩種:分別爲AsyncPostBackTriggerPostBackTriggerAsyncPostBackTrigge用來指定某個服務器端控件以及其將觸發的服務器端事件作爲該UpdatePanel的異步更新觸發器,它需要設置的屬性有控件ID和服務端控件的事件;PostBackTrigger用來指定在UpdatePanel中的某個服務端控件,它所引發的回送不使用異步回送,而仍然是傳統的整頁回送。

4.2.3 UpdateProgress控件 UpdatePanel控件中的內容進行局部刷新時,該控件可以提供刷新狀態的信息。前文所述,一個頁面上可以放一個或者多個UpdatePanel控件,但是,當其中一個UpdatePanel中更新的內容很緩慢,需要用戶等待很長時間時,很容易讓用戶誤以爲應用程序處於死機狀態。在這種情況下,UpdateProgress控件就發揮出它的特性,提供頁面部分內容刷新時的狀態信息。一個頁面上,一個UpdateProgress控件可以和一個UpdataPanel控件關聯,也可以和多個UpdatePanel控件關聯。UpdateProgress控件提供了AssociatedUpdate PanelID屬性,可以指定UpdateProgress控件顯示哪一個UpdatePanel控件。 UpdateProgress控件的簡單定義如下: <aspUpdateProgressID=”UpdateProgress1” runat=”server” AssociatedUpdatePanelID= UpdatePanel1"> <ProgressTemplate> 數據正在讀取中,請稍後…… </ProgressTemplate> </aspUpdateProgress>

4.2.4 Timer控件 該控件用於在一個規定的時間內執行提交操作。使用Timer控件可以執行提交整個頁面操作,也可以和UpdatePanel控件一起使用,在規定時間內執行頁面的局部刷新操作。Timer控件作爲服務器控件將JavaScript部件嵌入到了Web頁面中,當Timer控件的Interval屬性設置的間隔時間到達時,該部件便會激發來自於瀏覽器的提交操作。Timer控件設置的屬性操作在服務器端運行,並且將這些屬性值傳遞給JavaScript部件。與其他控件一樣,Timer控件也需要依賴於ScriptManager控件。Timer控件既可以放在UpdatePanel控件外,也可以放在UpdatePanel控件內。其簡單的定義如下: <aspTimer ID="Timer1" runat="server"> </aspTimer> 值得注意的是,如果把Timer控件的Interval屬性值設置得過小,會對Web服務器造成嚴重的阻塞。所以,當頁面上要刷新的內容部分是必要的而且是頻繁的時候,才考慮使用Timer控件。

5 VS2005開發環境中使用ASP.NET AJAX控件要注意的問題

在利用VS2005進行Web開發的過程中,需要使用各種服務器控件。一般情況下,VS2005的常用控件都是可以和ASP.NET AJAX控件結合使用的。但是,以下控件與ASP.NET AJAX控件有不相兼容的地方,是需要注意的。

5.1 UpdatePanel控件不兼容的控件 TreeViewMenu控件; Web Parts 控件; Substitution控件。 登錄控件,如LoginPasswordRecoveryChange PasswordCreateUserWizard控件。在默認情況下,上述控件與UpdatePanel控件是不相兼容的。當上述控件轉換爲可編輯狀態時,登錄控件中的驗證控件便可以與UpdatePanel控件兼容。 驗證控件類。如BaseCompareValidatorBaseValidatorCompareValidatorcustomValidatorRangeValidatorRegular ExpressionValidatorRequiredFieldValidatorValidation Summary控件。這些控件在默認情況下也可以與UpdatePanel控件結合使用,但是在Web應用程序發佈之後,上述驗證功能可能會出現失效情形。要使得這些驗證控件能與UpdatePanel控件兼容,需要把上述驗證類控件的Enable ClientScript屬性設置爲false。這樣,就不允許客戶端腳本被用於在瀏覽器端執行驗證操作。在異步式提交操作中,驗證控件就會在服務器端執行驗證操作。 GridViewDetailsView控件。在默認情況下,GridViewDetailsView控件與UpdatePanel控件可正常兼容使用。但是,如果把它們的EnableSortingAndPagingCallbacks屬性設置爲True的時候(默認值爲False),在UpdatePanle中的GridViewDetailsView控件的排序和分頁功能將失效。FileUpload控件。FileUpload控件在默認情況下,放在UpdatePanel中並且有控件觸發時,不能發揮上傳作用。但是當UpdatePanelTriggers屬性中,設置觸發控件(例如Button,)爲PostBack時,FileUpload可以發揮上傳功能,只是整個頁面不能局部刷新。

5.2 頁面跳轉要注意的問題 通常情況下,開發Web應用程序就必然會有頁面之間的傳值與跳轉。如果UpdatePanel內有觸發頁面跳轉的控件(如Button),那麼該控件的事件中就不能用如下的語句,否則會彈出異常的對話框。 調用Response.Write() 調用Response filters HttpModules 調用Server.Transfer() 5.3 利用ASP.NET AJAX控件後,彈出對話框的問題 在使用ASP.NET AJAX控件後,如果想利用Js腳本來輸出一些提示對話框,往往會想到利用 Page.Register ClientScriptBlock或者 Page.RegisterStartupScript註冊,但是,頁面上仍然沒有提示信息。利用如下語句即可以解決這個問題: ScriptManager.RegisterClientScriptBlock(UpdatePanel1this.GetType()"click""alert('提示信息')"true) 就可以正常的彈出alert對話框了。 需要注意的是,如果在頁面中有多個UpdatePanel,如果每個UpdatePanelUpdateMode的屬性值都是“always”(默認值),則可以使用那個UpdatePanel的實例作爲參數;如果每個UpdaePanelUpdateMode屬性值爲conditional,那麼就必須使用正在更新的那個UpdatePanel作爲參數,這樣腳本才能起作用。

6 小結

AJAX因具有獨特的優勢,迅速成爲Web研究熱點,並在實際開發得到廣泛應用,使網頁開發的效能得到了很大的擴展。本文從AJAX的理論出發,引申到ASP.NET AJAX的原理,總結了利用VS2005開發工具和ASP.NET AJAX框架開發WEB應用程序中的若干問題,爲Web應用的開發提供了很好的借鑑作用。ASP.NET AJAX將會是Web開發中重要的利器,應用也將會越來越廣泛。

 參考文獻

[1]奚江華. ASP.NET 2.0 開發詳解使用C#[M].北京: 清化大學出版社,2006

 [2]謝小魁. Ajax技術及其在WebGIS中的應用.計算機與信息技術[J].2007,第3

[3]微軟官方網站:http//www.asp.net/ajax

[4]陳冠軍.征服ASP.NET 2.0 Ajax——Web開發技術詳解[M].北京:人民教育出版社,2007 [5]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章