前面介紹過了幾個ASP.Net當中的AJax機制之後,不知道讀者是否偶而也有一些confuse,原因是有太多種方法可以在.ASPx網頁上進行AJax動作了,目前最常見的幾種方式是:
1) 傳統的HTTP request(要自己寫一些JavaScript code)
2) asp.net 2.0當中的Call Back技術(ASP.Net 2.0當中原生支持,不需要安裝任何套件)
3)安裝ASP.Net AJax套件之後的 異步 Web Services Call
4)安裝ASP.Net AJax套件之後的 異步 Page Method Call
5)安裝ASP.Net AJax套件之後的 UpdatePanel
由於有很多讀者問到,同時也不少人有這方面的爭論或是疑惑,因此筆者分別針對這幾種方式稍做說明。
目前,只要您是ASP.Net的開發人員,我相信你會在2,3,4,5這幾種方法當中選一個,而最常用的可能是方法5。因為方法1這種傳統的Http Request不僅要編寫相當多的JavaScript,並且很可能您要自己處理浏覽器兼容與支持的相關問題,因此一般來說我們不太做這樣的用法。
而其中最簡單的則是方法5, 采用UpdatePanel,但是, 讀者要知道,上述各種AJax技術當中,最耗費頻寬且效率最差的就是UpdatePanel,筆者在研討會常常碰到讀者詢問ASP.Net AJax的效率不好(但是其實只有UpdatePanel的效率不是非常好,而且這還跟使用的方式有關...),因此在這邊筆者要再三強調,僅管你看到 UpdatePanel 所謂的“partial postback” "似乎只是" 將一小塊區域回傳給伺服器端,但是實際測試後你會發現,在進行partial postback時,其實是 "整個頁面" 回傳給伺服器端(只是沒有換頁),而雖然reload回來的時候確實是局部的頁面,但是如果你加上了Timer一起用,肯定會造成可怕的網路流量...
而方法3的異步Web Services呼叫其實是筆者比較喜歡的方式,不管在執行效率或是原理架構上,都是蠻漂亮的AJAX用法,而方法4的PageMethod則是類似於方法3的一種簡易用法,不需要額外建立一個Web Services(.asmx),就可以在頁面當直接使用,是比較輕量級的方式,如果您的頁面上想要畫龍點睛的來一小段AJAX功能,方法4是不錯的選擇,而方法3則可以讓開發人員以正規的方式建立較為龐大的AJAX架構,例如編寫一個AJax版的開發平台,類庫...等
而方法2呢?怎麼越來越少聽到筆者談起?可能有讀者以為ASP.Net AJAX出現之後我們就把它拋在一邊了,其實這個觀念不是非常的正確,您會發現Call Back技術依舊是目前 "編寫支持AJax功能的Web控件" 最好的方式...
可能筆者提的很少,但是其實是因為台灣現在寫控件的人越來越少了,您若深入研究就會發現,ASP.Net 2.0當中的Call Back機制不僅可以用在網頁上,也可以用在User Control和Web control,可以讓頁面(或控件)直接支持AJAX功能,是非常好用且筆者非常喜歡的一種做法,如果你的開發團隊當中,需要自行開發控件,而這些控件想要支持AJax,Call Back技術是最理想的選擇...
而Extender Control呢?它不是也能來編寫控件嗎?呵呵,沒錯,不過這又是另一個層面的問題了,也許下次有機會時後再跟大家報告一下這中間的差異...