ASP.NET AJAX分析與應用_ASP.NET是什么
發(fā)布時間:2020-02-16 來源: 日記大全 點擊:
摘要:本文介紹了ASP.NET AJAX的由來、特性和架構以及相關的服務端和客戶端技術,并結合實際項目開發(fā),證明使用ASP.NET AJAX帶來了更好的用戶體驗和更高的開發(fā)效率。
關鍵詞:ASP.NET AJAX;控件;服務端;客戶端
中圖分類號:TP312 文獻標識碼:A
1 引言
2005年,在 Web2.0熱潮中,Ajax誕生,揭開了無刷新更新頁面時代的序幕,并迅速以其更好的用戶體驗,更少的服務器和帶寬負擔等傳統Web應用無法比擬的優(yōu)勢,成為炙手可熱的Web開發(fā)技術,基于標準化被廣泛支持和應用。
然而,Ajax也有很多不足之處:由于其涉及的技術太多,開發(fā)者仍需要大量的學習,對于某些比較復雜的客戶端程序來講,往往需要開發(fā)者對JavaScript以及相關技術非常精通;每種瀏覽器中提供的DOM模型均有輕微的差異,在編寫跨瀏覽器的客戶端應用程序時往往非常困難; 由于大部分表示層以及少部分業(yè)務邏輯均被移到了客戶端用JavaScript實現,使客戶端代碼量急劇增大,但JavaScript從語言層面上并沒有完善的面向對象支持,使客戶端代碼的質量無法保證。
綜上所述,Ajax技術的優(yōu)勢在于提高用戶體驗,不足之處在于開發(fā)困難。而今應用程序的發(fā)展趨勢是:把用戶體驗放在第一位,但與此同時,開發(fā)效率也不容忽視。為了解決這樣的問題,各種Ajax框架如雨后春筍般應運而生。
2 ASP.NET AJAX簡介?
2.1 Ajax技術
Ajax在用戶和服務器之間建立異步操作機制,可將一些基本的操作交給Ajax引擎,需要從服務器獲取數據時才通過Ajax引擎直接向服務器請求。圖1為傳統Web應用模型與Ajax Web應用模型的工作模式比較:
圖1傳統Web應用模型與Ajax Web應用模型的工作模式比較?
2.2 ASP.NET AJAX框架
像所有的優(yōu)秀技術一樣,Ajax已經催生出大量框架,但歸結起來不外乎三類:回調框架、UI框架和完整框架:
回調框架一般由少數的幾個客戶端及服務器端庫文件組成。它只允許開發(fā)者從客戶端調用服務器端代碼片段,并以序列化方式傳送輸入和輸出參數。
UI框架一般都是從現有的專業(yè)控件庫演變而來,它們往往提供給開發(fā)者一些高級網格控件、圖表控件和樹控件等等。這些控件都會支持異步回發(fā)機制并在客戶端生成用于自動刷新頁面的JavaScript代碼。
完整框架提供包含控件和應用程序服務在內的極為豐富的編程模型,更適宜于同時應用于客戶端和服務器端。
ASP.NET AJAX框架屬于第三種類別,在實現Ajax功能的同時又極大地簡化了開發(fā)過程。使用 ASP.Net AJAX,甚至只需拖拽幾個控件,就可以使Web 頁面具有精彩的AJAX 用戶界面效果,同時大量地降低應用服務器層的資源消耗。圖2為傳統ASP.NET頁面與ASP.NET AJAX頁面的工作原理比較:
圖2傳統ASP.NET頁面與ASP.NET AJAX頁面的工作原理比較
ASP.NET AJAX主要的設計目標有兩個:第一,對現有的ASP.NET服務器端模型進行擴展,讓其可以生成實現富客戶端的JavaScript代碼;第二,為ASP.NET增加客戶端編程模型,讓純粹的客戶端編程變得更加簡單。
這樣,ASP.NET AJAX的特性就可以相應地分為服務器端和客戶端兩個部分,前者包含ASP.NET 2.0 AJAX Extensions以及ASP.NET AJAX Control Toolkit(開發(fā)者社區(qū)協作的產物,其中包含了數十種非常有用的ASP.NET AJAX服務器端擴展器控件以及多種獨立的ASP.NET AJAX服務器端控件),后者包含Microsoft AJAX Library。ASP.NET AJAX 的架構如圖3所示:
圖3ASP.NET AJAX 服務器和客戶端架構
ASP.NET AJAX客戶端部分是一組JavaScript庫。這些庫在任何方面都沒有綁定到 ASP.NET――非ASP.NET開發(fā)人員也可以在自己的Web頁面里使用。客戶端庫沒有提供太多的特性(例如,不包含任何可以直接拖放到Web頁面的預先建立的功能)。相反,建立了用于開發(fā)ASP.NET AJAX頁面的基礎。這個基礎擴展了JavaScript,彌補了幾個方面的不足,并提供了一些基本架構。
ASP.NET AJAX服務器端部分在一個更高的層次上工作。包括使用那些客戶端腳本庫的控件和組件。
3 ASP.NET AJAX的應用?
3.1 服務器端和客戶端使用方法分析
ASP.NET AJAX分為服務器端和客戶端兩個部分,有些功能既可以完全使用客戶端功能實現,又可以完全使用服務器端功能實現。所以,比較異同,權衡利弊,并根據實際開發(fā)中的具體情況選擇最合適的方法顯得至關重要。?
3.2 ASP.NET AJAX框架的技術實踐
對于開發(fā)中遇到的不同情況以及需求,應該區(qū)別對待并選擇最合適的開發(fā)方式,下面是三種主要的場景:
1.繼續(xù)使用普通的ASP.NET服務器控件,但利用ASP.NET AJAX組件或者新控件和控件擴展器擴展其功能。
2. 從頭創(chuàng)建“純粹的”Ajax應用程序。
所謂“純粹的”Ajax應用程序,是指服務器端沒有任何表示層邏輯,只用來提供數據,同時所有的表示層邏輯均在客戶端JavaScript中完成。極端一點說,這種“純粹的”Ajax應用程序將只有一個頁面,所有的功能(包括用戶輸入、與服務器通信、界面改變等)均通過客戶端JavaScript來實現。
3.在非ASP.NET 2.0服務器端平臺上使用ASP.NET AJAX。
這種情況下的ASP.NET AJAX服務器端無法實現,只能考慮使用ASP.NET AJAX的客戶端實現方式。
值得注意的是,ASP.NET AJAX的兩種實現方式并不是互相對立的,而是相輔相成的。上面所說的“選擇某種實現方式”僅僅意味著“偏重使用某種實現方式”。
上述第一種場景最為常見,而且實現最為簡單。下面以《湖北省農村能源管理系統》中的實際應用為例,簡單介紹CascadingDropDown控件的使用。
CascadingDropDown是AjaxControlToolkit中的組件,用來控制數個普通的DropDownList控件,使其產生無刷新的級聯效果,同時大大簡化開發(fā)流程。完成級聯選擇項變化的過程通過發(fā)布在 IIS 服務器上的 Web Service 實現。這個 Web Service 可以完全地控制其中級聯的業(yè)務邏輯。通過它開發(fā)人員可以很方便地從 Xml 或者數據庫中獲得相關數據。以下是相關的主要代碼:
。!--下拉列表控件-->
<asp:DropDownList ID=“DropDownList1” runat=“server” SkinID=“ddl1” AutoPostBack=“true” OnSelectedIndexChanged=“DropDownList_SelectedIndexChanged”/>
•••
。!--對應的CascadingDropDown控件-->
。糰jaxToolkit:CascadingDropDown ID=“CascadingDropDown1” runat=“server” TargetControlID=“DropDownList1” LoadingText=“正在加載區(qū)域類型” PromptText=“請選擇區(qū)域類型” ServicePath=“UserManage.asmx” ServiceMethod=“getAreaType” Category=“typename”>
</ajaxToolkit:CascadingDropDown>
。糰jaxToolkit:CascadingDropDown ID=“CascadingDropDown2” runat=“server” TargetControlID=“DropDownList2” ParentControlID=“DropDownList1” LoadingText=“正在加載市級城市” PromptText=“請選擇市級城市” ServicePath=“UserManage.asmx” ServiceMethod=“getCity” Category=“cityname”>
</ajaxToolkit:CascadingDropDown>
。糰jaxToolkit:CascadingDropDown ID=“CascadingDropDown3” runat=“server” TargetControlID=“DropDownList3” ParentControlID=“DropDownList2” LoadingText=“正在加載縣級城市”PromptText=“請選擇縣級城市” ServicePath=“UserManage.asmx” ServiceMethod=“getCountry” Category=“countryname”>
。/ajaxToolkit:CascadingDropDown>
WebService代碼(以三級下拉列表的WebService代碼為例):
//獲取縣級城市
[WebMethod]
public CascadingDropDownNameValue[] getCountry(string knownCategoryValues, string category)
{StringDictionary kv= CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
•••
if ((kv.ContainsKey(“rolename”) && kv.ContainsKey(“cityname”) && kv[“rolename”] == “6fc98827-de43-4026-b67d-b4d207fb1afd”)|| (kv.ContainsKey(“typename”) && kv.ContainsKey(“cityname”)))
{ DataTable countries = getCountryTable(kv[“cityname”].ToString());
//填充下拉列表
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
foreach (DataRow dr in countries.Rows)
{ values.Add(new CascadingDropDownNameValue(dr[“CountryName”].ToString(), dr[“CountryID”].ToString())); }
return values.ToArray();
•••
4 結束語
ASP.NET AJAX最精彩的特性是它并不只是一個JavaScript庫或者一個簡化回調的.NET組件,而是一個多層的平臺,能夠創(chuàng)建更具響應性更動態(tài)的頁面――設置一個完全不同類型的Web應用程序。由以上內容可知,可以在三個不同層次使用ASP.NET AJAX框架。另外,ASP.NET AJAX還在不斷的發(fā)展改善中,可以大膽預測,ASP.NET AJAX Control Toolkit將提供大量的服務器端擴展器控件,讓開發(fā)者極為方便地為現有的ASP.NET應用程序添加Ajax功能;其他服務器端平臺上將有對ASP.NET AJAX服務器端控件/組件的實現。?
參考文獻?
[1]陳黎夫.ASP.NET AJAX程序設計(第I卷): 服務器端ASP.NET 2.0 AJAX Extensions與ASP.NET AJAX Control Toolkit [M]. 北京: 人民郵電出版社, 2007.?
[2]陳黎夫.ASP.NET 2.0 Ajax程序設計(第II卷): 客戶端Microsoft AJAX Library與異步通信層[M]. 北京: 人民郵電出版社, 2007.?
[3][美] Matthew MacDonald, Mario Szpuszta.ASP.NET 3.5高級程序設計(第2版) [M]. 北京: 人民郵電出版社, 2008.?
相關熱詞搜索:分析 ASP NET ASP.NET AJAX分析與應用 asp net+ajax asp net ajax主頁
熱點文章閱讀