摘要:ASP.NET AJAX實(shí)現(xiàn)了Web頁(yè)面豐富的部分刷新效果.本文通過(guò)介紹AJAX原理,引申到ASP.NET AJAX原理,并結(jié)合人機(jī)管理系統(tǒng)實(shí)例從開(kāi)發(fā)角度進(jìn)一步闡述了Ajax技術(shù)在本系統(tǒng)中的實(shí)現(xiàn)方法及注意事項(xiàng).
關(guān)鍵詞:ASP.NET AJAX 、Web開(kāi)發(fā)、人機(jī)管理系統(tǒng)
1、引言
當(dāng)前,Web技術(shù)的不斷發(fā)展使得B/S得以廣泛地應(yīng)用.但Web傳統(tǒng)的開(kāi)發(fā)技術(shù)使得網(wǎng)頁(yè)的交互性能大打折扣.隨著AJAX技術(shù)的興起,Web開(kāi)發(fā)技術(shù)超越了傳統(tǒng)的開(kāi)發(fā)模式,發(fā)生了質(zhì)的飛躍.而微軟公司推出的ASP.NET AJAX框架與ASP.NET的結(jié)合,使得Web的開(kāi)發(fā)方式在.NET環(huán)境下更加簡(jiǎn)單易用,頁(yè)面交互性能也得到很大提高.
2、 Ajax引擎的原理
AJAX是現(xiàn)有多種技術(shù)的綜合,使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn)數(shù)據(jù),使用DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互數(shù)據(jù),使用XML和XSTL進(jìn)行數(shù)據(jù)交換與處理,使用XMLHttpRequest對(duì)象進(jìn)行異步數(shù)據(jù)讀取,使用JavaScript綁定和處理所有數(shù)據(jù).AJAX為交互操作較多、數(shù)據(jù)讀寫頻繁和數(shù)據(jù)分類良好的Web應(yīng)用提供了一個(gè)很好的解決方案.其中XMLHttpRequest、JavaScript和DOM是AJAX技術(shù)的核心.
2.1 XMLHttpRequest
XMLHttpRequest是AJAX引擎的核心技術(shù),使整個(gè)頁(yè)面無(wú)需刷新即可從服務(wù)器獲取所需數(shù)據(jù)問(wèn)題的關(guān)鍵.它在微軟IE平臺(tái)下是XMLHTTP組件的一個(gè)對(duì)象,通過(guò)允許開(kāi)發(fā)人員在Web頁(yè)面內(nèi)部使用組件擴(kuò)展自身功能,開(kāi)發(fā)人員不必從當(dāng)前的Web頁(yè)面導(dǎo)航而直接與服務(wù)器上的數(shù)據(jù)庫(kù)進(jìn)行雙向數(shù)據(jù)傳輸.該項(xiàng)功能相當(dāng)重要,它彌補(bǔ)了無(wú)狀態(tài)連接的缺點(diǎn),排除下載冗余Web數(shù)據(jù)的需要,從而提高了進(jìn)程速度.
2.2 DOM
DOM是給HTML和XML文件使用的一組API.它提供了文件的結(jié)構(gòu)表述,允許開(kāi)發(fā)人員改變其中的內(nèi)容,建立網(wǎng)頁(yè)與程序語(yǔ)言溝通的橋梁.所有Web開(kāi)發(fā)人員操作及建立文件的屬性、方法及事件都以對(duì)象方式來(lái)展現(xiàn),這些對(duì)象均可由當(dāng)今大多數(shù)瀏覽器以腳本取用.一個(gè)用HTML或XHTML構(gòu)建的網(wǎng)頁(yè)可看作是一組結(jié)構(gòu)化數(shù)據(jù),這些數(shù)據(jù)被封在DOM中,且DOM提供對(duì)網(wǎng)頁(yè)中各個(gè)對(duì)象的讀寫支持.
2.3 JavaScript
JavaScript是一種在瀏覽器中大量使用的跨平臺(tái)編程語(yǔ)言,常被用來(lái)制作網(wǎng)頁(yè)特效或表單驗(yàn)證.它在AJAX中是XMLHttpRequest與DOM交互的橋梁以及AJAX引擎工作的主要推動(dòng)力.它通過(guò)調(diào)用XMLHttpRequest的屬性和方法獲取服務(wù)器端數(shù)據(jù),調(diào)用DOM的API更新Web頁(yè)面內(nèi)容,從而實(shí)現(xiàn)整個(gè)頁(yè)面的無(wú)刷新更新頁(yè)面的效果.
3、AJAX架構(gòu)
AJAX由客戶端腳本庫(kù)和服務(wù)端組件組成,這兩者被集成在一起提供了一個(gè)功能強(qiáng)大的開(kāi)發(fā)框架.客戶端腳本庫(kù)中包含兩種最熟悉的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),分別是跨瀏覽器使用的ECMAScript技術(shù)和動(dòng)態(tài)的HTML網(wǎng)頁(yè)開(kāi)發(fā)技術(shù),并且將這兩種技術(shù)集成到了ASP.NET 2.0基于服務(wù)器端的開(kāi)發(fā)平臺(tái)中.
3.1 ASP.NET服務(wù)器端架構(gòu)
ASP.NET服務(wù)器端組件是用于管理UI和應(yīng)用程序流,管理序列,驗(yàn)證和控件擴(kuò)展性等.此外,ASP.NET Web服務(wù)也能用于訪問(wèn)ASP.NET應(yīng)用服務(wù),包括窗體驗(yàn)證和用戶驗(yàn)證.
3.2 ASP.NET服務(wù)器控件
ASP.NET AJAX控件由服務(wù)器端和客戶端代碼構(gòu)成在一起以產(chǎn)生類似于AJAX的行為.
3.3 ASP.NET AJAX客戶端架構(gòu)
ASP.NET AJAX客戶端腳本庫(kù)由.js文件構(gòu)件.這些.js文件提供了面向?qū)ο箝_(kāi)發(fā)的特性.這一特性使得連續(xù)性和模塊化在客戶端腳本中達(dá)到一個(gè)新的層次.
4、ASP.NET AJAX在人機(jī)管理系統(tǒng)中的應(yīng)用
4.1 ASP.NET AJAX控件在人機(jī)管理系統(tǒng)中的應(yīng)用
4.1.1 ScriptManager控件
用來(lái)處理頁(yè)面上的所有組件以及頁(yè)面局部更新,生成相關(guān)的客戶端代理腳本以便能夠在JS中訪問(wèn)Web Service,所有需要支持ASP.NET AJAX的ASP.NET頁(yè)面上有且只能有一個(gè)ScriptManager控件,如果要使用其他AJAX控件,就必須要有ScriptManager控件的支持.在ScriptManager控件中我們可以指定需要的腳本庫(kù),或者指定通過(guò)JS來(lái)調(diào)用的Web Service,還可以指定頁(yè)面錯(cuò)誤處理等.使用來(lái)定義一個(gè)ScriptManager,其定義形式是:
在Web應(yīng)用開(kāi)發(fā)中,ScriptManager控件是必須的.要使用ASP.NET AJAX控件,每個(gè).aspx頁(yè)面上必須有且只有一個(gè)ScriptMangeger控件.值得注意的是,頁(yè)面上任何用ScriptManger控件注冊(cè)的腳本和所有事件處理腳本都必須在頁(yè)面
4.1.2 UpdatePanel控件
該控件可以用來(lái)創(chuàng)建豐富的局部更新Web應(yīng)用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一個(gè)控件,其強(qiáng)大之處在于不用編寫任何客戶端腳本,只要在一個(gè)頁(yè)面上添加幾個(gè)UpdatePanel控件和一個(gè)ScriptManager控件就可以自動(dòng)實(shí)現(xiàn)局部更新.一個(gè)頁(yè)面上可以放一個(gè)或者多個(gè)UpdatePanel控件,并且UpdatePanel控件還可以嵌套使用.UpdatePanel的工作依賴于ScriptManager服務(wù)端控件和客戶端PageRequestManager類.當(dāng)ScriptManager中允許頁(yè)面局部更新時(shí),它會(huì)以異步的方式回傳給服務(wù)器,與傳統(tǒng)的整頁(yè)回傳方式不同的是只有包含在UpdatePanel中的頁(yè)面部分會(huì)被更新,在從服務(wù)端返回HTML之后,PageRequestManager會(huì)通過(guò)操作DOM對(duì)象來(lái)替換需要更新的代碼片段.
本系統(tǒng)中的UpdatePanel定義如下:
………
定義表的樣式
………
4.1.3 UpdateProgress控件
在UpdatePanel控件中的內(nèi)容進(jìn)行局部刷新時(shí),該控件可以提供刷新?tīng)顟B(tài)的信息.前文所述,一個(gè)頁(yè)面上可以放一個(gè)或者多個(gè)UpdatePanel控件,但是,當(dāng)其中一個(gè)UpdatePanel中更新的內(nèi)容很緩慢,需要用戶等待很長(zhǎng)時(shí)間時(shí),很容易讓用戶誤以為應(yīng)用程序處于”死機(jī)”狀態(tài).在這種情況下,UpdateProgress控件就發(fā)揮出它的特性,提供頁(yè)面部分內(nèi)容刷新時(shí)的狀態(tài)信息.一個(gè)頁(yè)面上,一個(gè)UpdateProgress控件可以和一個(gè)UpdataPanel控件關(guān)聯(lián),也可以和多個(gè)UpdatePanel控件關(guān)聯(lián).
UpdateProgress控件的使用如下:
數(shù)據(jù)正在讀取中,請(qǐng)稍后……
5、VS2005開(kāi)發(fā)環(huán)境中使用ASP.NET AJAX控件要注意的問(wèn)題
在利用VS2005進(jìn)行Web開(kāi)發(fā)的過(guò)程中,需要使用各種服務(wù)器控件.一般情況下,VS2005的常用控件都是可以和ASP.NET AJAX控件結(jié)合使用的.但是,以下控件與ASP.NETAJAX控件有不相兼容的地方,是需要注意的.
5.1與UpdatePanel控件不兼容的控件
⑴TreeView和Menu控件;Web Parts控件;Substitution控件.
⑵登錄控件,如Login,PasswordRecovery,ChangePassword和CreateUserWizard控件.在默認(rèn)情況下,上述控件與UpdatePanel控件是不相兼容的.當(dāng)上述控件轉(zhuǎn)換為可編輯狀態(tài)時(shí),登錄控件中的驗(yàn)證控件便可以與UpdatePanel控件兼容.
⑶驗(yàn)證控件類.如RequiredFieldValidator和ValidationSummary控件.這些控件在默認(rèn)情況下也可以與UpdatePanel控件結(jié)合使用,但是在Web應(yīng)用程序發(fā)布之后,上述驗(yàn)證功能可能會(huì)出現(xiàn)失效情形.要使得這些驗(yàn)證控件能與UpdatePanel控件兼容,需要把上述驗(yàn)證類控件的EnableClientScript屬性設(shè)置為1.這樣,就不允許客戶端腳本被用于在瀏覽器端執(zhí)行驗(yàn)證操作.在異步式提交操作中,驗(yàn)證控件就會(huì)在服務(wù)器端執(zhí)行驗(yàn)證操作.
⑷GridView和DetailsView控件.在默認(rèn)情況下,GridView和DetailsView控件與UpdatePanel控件可正常兼容使用.但是,如果把它們的EnableSortingAndPagingCallbacks屬性設(shè)置為True的時(shí)候,在UpdatePanle中的GridView和DetailsView控件的排序和分頁(yè)功能將失效.
⑸FileUpload控件.FileUpload控件在默認(rèn)情況下,放在UpdatePanel中并且有控件觸發(fā)時(shí),不能發(fā)揮上傳作用.但是當(dāng)UpdatePanel的Triggers屬性中,設(shè)置觸發(fā)控件(如Button,)為PostBack時(shí),F(xiàn)ileUpload可以發(fā)揮上傳功能,只是整個(gè)頁(yè)面不能局部刷新.
5.2頁(yè)面跳轉(zhuǎn)要注意的問(wèn)題
通常情況下,開(kāi)發(fā)Web應(yīng)用程序就必然會(huì)有頁(yè)面之間的傳值與跳轉(zhuǎn).如果UpdatePanel內(nèi)有觸發(fā)頁(yè)面跳轉(zhuǎn)的控件(如Button),那么該控件的事件中就不能用如下的語(yǔ)句,否則會(huì)彈出異常的對(duì)話框.
5.3利用AJAX控件后,彈出對(duì)話框的問(wèn)題
在使用AJAX控件后,如果想利用Js腳本來(lái)輸出一些提示對(duì)話框,往往會(huì)想到利用Page.RegisterClientScriptBlock或者Page.RegisterStartupScript注冊(cè),但是,頁(yè)面上仍然沒(méi)有提示信息.利用如下語(yǔ)句即可以解決這個(gè)問(wèn)題:
ScriptManager.RegisterClientScriptBlock(UpdatePanel1,this.GetType(),\"click\",\"alert('提示信息')\",true);就可以正常的彈出alert對(duì)話框了.需要注意的是,如果在頁(yè)面中有多個(gè)UpdatePanel,如果每個(gè)UpdatePanel的UpdateMode的屬性值都是”always”,則可以使用那個(gè)UpdatePanel的實(shí)例作為參數(shù);如果每個(gè)UpdaePanel的UpdateMode屬性值為conditional,那么就必須使用正在更新的那個(gè)UpdatePanel作為參數(shù),這樣腳本才能起作用.
6小結(jié)
通過(guò)使用Ajax技術(shù)開(kāi)發(fā)B/S架構(gòu)下的Web應(yīng)用系統(tǒng),能夠縮短Web應(yīng)用系統(tǒng)的數(shù)據(jù)處理響應(yīng)時(shí)間,提高系統(tǒng)處理業(yè)務(wù)的效率,進(jìn)一步提升應(yīng)用系統(tǒng)的實(shí)用性、高效性,充分發(fā)揮Web應(yīng)用的優(yōu)勢(shì),最終達(dá)到提高企業(yè)信息化管理水平、促進(jìn)企業(yè)信息化發(fā)展的目的.
參考文獻(xiàn)
[1](美)阿斯利森,(美)舒塔著;金靈,等譯.Ajax基礎(chǔ)教程[M].北京:人民郵電出版社,2006.
[2]施偉偉,張蓓.征服Ajax Web2.0快速入門與項(xiàng)目實(shí)踐(.NET) [M].北京:人民郵電出版社,2006.
作者簡(jiǎn)介:
閆晗,女,黑龍江省大慶市人,大慶油田有限責(zé)任公司第二采油廠信息中心干事,助理工程師,從事軟件開(kāi)發(fā)工作.