熟悉Ajax的人應(yīng)該都知道DWR這個(gè)開(kāi)源框架,它讓Ajax程序開(kāi)發(fā)變得簡(jiǎn)單,但是目前好像只能支持Java,今天就來(lái)說(shuō)一下我在Asp.Net項(xiàng)目中怎樣模擬實(shí)現(xiàn)DWR的功能:
創(chuàng)建一個(gè)接口(姑且叫做IWAjaxEngine),其作用定義對(duì)Ajax暴露的方法,我設(shè)計(jì)的是一個(gè)返回string類型的方法,還有一個(gè)是沒(méi)有返回值 的方法,兩個(gè)方法的參數(shù)都是Dictionary<string, string>類型。這樣,Ajax在調(diào)用后臺(tái)業(yè)務(wù)邏輯類時(shí),都可以通過(guò)這個(gè)接口類型進(jìn)行調(diào)用,而那些業(yè)務(wù)邏輯類只要是實(shí)現(xiàn)了這個(gè)接口,就可以通過(guò) 類名反射進(jìn)行初始化,反射部分下面詳細(xì)再說(shuō)。
在App_Data目錄下新建一個(gè)XML文檔作為配置文件,放在這個(gè)目錄下的原因,大家應(yīng)該都知道吧,是可以起到保護(hù)作用。這個(gè)配置文件中就是專門配置實(shí) 現(xiàn)IWAjaxEngine接口的業(yè)務(wù)邏輯類的信息(類名、參數(shù)列表、參數(shù)類型等等),然后創(chuàng)建一個(gè)封裝這個(gè)配置文件的類(WAjaxConfig),可 以把這個(gè)類的實(shí)例設(shè)為static,這樣就不用每次都讀配置文件了。
接下來(lái)就說(shuō)到重點(diǎn)部分了,也就是Ajax怎么直接調(diào)用后臺(tái)業(yè)務(wù)邏輯類。我的想法是創(chuàng)建一個(gè)Web窗體,也就是.aspx和.aspx.cs文件,在 page_load事件中根據(jù)Ajax傳遞過(guò)來(lái)的參數(shù)(包含能夠找到配置文件中類信息的ID標(biāo)識(shí))在WAjaxConfig中找到要調(diào)用的類名(找不到的 話就拋出異常),然后通過(guò)類名反射創(chuàng)建一個(gè)該類的實(shí)例(當(dāng)然是以IWAjaxEngine接口作為該實(shí)例的類型),有了實(shí)例,我們就可以調(diào)用接口定義的兩 個(gè)方法,要么返回字符串要么什么都不返回。
整個(gè)實(shí)現(xiàn)的思路就是這樣,說(shuō)起來(lái)與DWR還是有所不同的,不過(guò)已經(jīng)滿足了我的需求。當(dāng)然這里說(shuō)的有些簡(jiǎn)單,真正做起來(lái)并不是很容易,有很多需要細(xì)化的地 方。另外,我還做了一些輔助的工具類,可以生成XML或JSON字符串;前臺(tái)也實(shí)現(xiàn)了類似于DWR引擎腳本的engine.js和工具集腳本 util.js(其實(shí)是把DWR的util.js搬過(guò)來(lái)了,誰(shuí)讓人家做的功能強(qiáng)大呢,不過(guò)也添改了一些代碼,因?yàn)榘l(fā)現(xiàn)有些js代碼不符合標(biāo)準(zhǔn)DOM操 作,F(xiàn)ireFox就不支持了,還有些方法不支持XML DOM 的NodeList。在此謝謝那位DWR的作者-_-),這樣,我們就可以在前臺(tái)像使用DWR一樣進(jìn)行編程了。
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇