AJAX在去年已經接觸過,但都是使用手動的方法編寫客戶端代碼,再加上被請求的頁面,感覺非常累,雖然早聽說過AJAX.NET和其他一些第3方開發的框架,卻一直沒有時間來體驗。今天干完手上的活,下了個最新版本的AJAX.NET體驗了下
我使用的還是VS2003,下載了個最新版本的AJAX.NET 6.4.5.1,下載地址:www.schwarz-interactive.de 下面說說使用方法:
1、準備工作
新建項目,使用.NET1.1就引用下載下來的AJAX.NET的類庫AjaxPro.dll,如果是使用.NET2.0 就引用AjaxPro2.dll
首先修改WEB.CONFIG文件
?在<system.web> 節點內增加
<httpHandlers>
???? <addverb="*"path="*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro"/>
</httpHandlers>
2、然后在Page_Load事件中注冊頁面類
如我將使用AJAX的頁面類名為‘AjaxControls’,注冊語句就這樣寫:
?????
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxControls));
紅字的地方是我的頁面的類名
這句的作用實際上是在頁面被請求的時候生成幾句調用JS的SCRIPT代碼
3、編寫服務器端處理函數
????????如:
???????? [AjaxPro.AjaxMethod]
???????? [AjaxPro.AjaxMethod]
???????? publicstring Fun(string str)
???????? {
????????????? return str;
???????? }
‘[AjaxPro.AjaxMethod]’這句是關鍵,函數或方法寫法沒什么特別的地方,只是要使用這句聲明這個函數是由AJAX.NET在頁面異步請求的,總之記住要通過AJAX獲得數據的后臺函數就使用[AjaxPro.AjaxMethod]來聲明一下。
‘[AjaxPro.AjaxMethod]’這句是關鍵,函數或方法寫法沒什么特別的地方,只是要使用這句聲明這個函數是由AJAX.NET在頁面異步請求的,總之記住要通過AJAX獲得數據的后臺函數就使用[AjaxPro.AjaxMethod]來聲明一下。
另外,在AJAX.NET中如果處理函數需要對SESSION進行操作,‘[AjaxPro.AjaxMethod]’需要改成‘[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]’在 [AjaxPro.AjaxMethod(AjaxPro.……)]? 的‘……?’部分ajax.net還提供了其他很多方法,可以處理一些特殊的請求。
還有一點注意,如果使用Application,直接讀取或寫入Application也是不行的,需要使用HttpContext.Current.Application,同樣對 Request的訪問也需要使用HttpContext.Current.Request。原因是直接使用的Application 或Request等 都是由Page類繼承下來的,而用Ajax.net對后臺方法訪問的時候,這些方法并不屬于Page類。但是Session比較特殊,使用 HttpContext.Current.Session仍然不能訪問,必須使用上面一段所用的方法并且直接就用Session就行。
4、客戶端代碼
在我的這個示例中,使用‘Ajax.AjaxControls.Fun("測試用的傳遞的字符串參數");’請求后臺的函數,然后返回一個OBJECT對象,這個OBJECT的VALUE屬性就可以得到后臺函數的返回值
如:
function doTest()
{
var?getobject = Ajax.AjaxControls.Fun("測試用的傳遞的字符串參數");
alert(getobject.value);
}
Ajax 是我這個項目的命名空間
AjaxControls 是我這個頁面的的類名
Fun 很明顯就是聲明了的那個AJAX可調用的方法名
()中的參數也就是我的Fun函數所需要的參數
doTest() 只是一個客戶段的函數,可以綁到控件的事件中,也可以已不用事件,隨便怎么處理
客戶端異步請求這個函數所得到的和平時我們用函數返回的稍微不同的就是,平時直接得到函數類型的返回值,而使用AJAX.NET客戶端異步請求后臺函數得到的是個OBJECT,要通過這個OBJECT的VALUE屬性才能得到函數返回的值。
通常這里的客戶段腳本還可以這樣寫:
?
function doTest()
{
Ajax.AjaxControls.Fun("測試用的傳遞的字符串參數",getdata);
}
function getdata(rv)
{
????alert(rv.value);
}
Ajax.AjaxControls.Fun 中的參數除了對應后臺函數的參數外,最后可以使用一個表達式參數,這個參數是某個客戶段函數名,設置后,Ajax.AjaxControls.Fun請求后所獲得OBJECT對象將被做為 表達式參數函數的一個參數傳遞到該函數中,然后通過這個OBJECT參數的VALUE就可以獲得 AJAX請求后臺函數所返回的值了
通過這幾個步驟 就可以做出一個簡單的使用Ajax.net結合.NET的示例頁面了。
下面說說用后的感受:
總體感覺上使用起來很方便,很簡單,但是功能不夠強大,也許是我初次涉及的緣故,還沒摸索出更高級的使用方法,但是在對服務器控件的控制上基本不能實現,需要使用其他方法如獲得控件輸出樣式,然后通過客戶端方法加載,還有除了能異步的獲得后臺請求的函數或方法的返回值之外,其他更具體復雜的操作都需要手動的寫代碼解決,不過確實是不錯的東西,可以很快速的完成某些AJAX的效果。也許還有很多更強大的功能我還沒摸索到,希望大家指教