開發人員使用JavaScript的一個主要原因就是可以避免回傳過程中帶來的頁 面重新整理。例如我們可以根據使用者的需要使用Treeview控制項來展開和摺疊相應的數 據節點。當你展開一個節點時,該Treeview控制項將會利用JavaScript讀取伺服器 上的子節點資訊,然後平滑無重新整理地插入這些新節點。如果沒有使用JavaScript 的話,Treeview控制項將會因為頁面的回傳而重新構建。不但使用者會發現因頁面刷 新而帶來的延遲,而且頁面極有可能回複到原來的狀態,即丟失前面所展開的那 些子節點資訊。對於伺服器端來說,因為每次回傳的過程中都要處理大量的視圖 狀態(View State)資訊,這也會嚴重影響程式的整體執行效能。
以前我們使用的JavaScript樣本幾乎都是自包含的,即它們通常是為了完成 一些特殊的顯示效果(例如彈出一個新的頁面視窗),而沒有和伺服器端代碼進 行資訊的互動。如果你也想構建一個類似的無重新整理頁面的話,你首先必須調用服 務器端的一個特定的方法,等待伺服器響應後就會將請求的資訊傳遞到用戶端, 從而避免了回傳這個過程。為了實現這個方案,你首先需要對如何將用戶端指令碼 和伺服器端代碼進行通訊有個大致的瞭解。儘管有許多中方法可以實現這兩者間 的互動(例如調用Web服務),但是由於受到特定的瀏覽器和平台的限制,它們 的實現是還是有一定的難度的。而在ASP.NET 2.0中,引入了一個稱為"客 戶端回調"的功能,利用這個內建的解決方案我們可以輕鬆實現用戶端指令碼 和伺服器端代碼間的互動,從而避免了頁面因回傳帶來的頻繁重新整理。
用戶端回調本質上就是指通過前端的用戶端指令碼向伺服器端傳遞相應的資料 參數,伺服器端再以接受到的參數進行查詢和處理,最後將結果回傳到用戶端進 行顯示。雖然這樣的過程不是一種創舉,但是對於許多開發人員來說這在某種思維 上還是無法理解的,因為JavaScript的記憶體管理和.NET CLR的記憶體管理是不同的 進程,而且管理的空間上也截然不同,所以彼此間無法直接參照也沒有直接進行 互動的方式,而用戶端回調卻是實現用戶端和伺服器端進行溝通的方法之一,又 因為它是在用戶端觸發的,所以這就應該是"用戶端回調"命名的由來 吧!
建立一個簡單的用戶端回調
為了在ASP.NET中展示一個用戶端回調的執行個體,首先我們將概述用戶端回調間 的互動過程是如何?的。下面是基本的步驟:
1. 在某時刻啟用一個JavaScript事件,從而觸發用戶端回調。
2. 觸發用戶端回調發生後,伺服器端的一個方法將被執行。該方法有一個 固定的模式――它接受的是一個字串參數,並且返回的也是一個字串參數。
3. 一旦頁面接受到來自伺服器端方法的響應結果後,它就可以利用 JavaScript修改一些和使用者介面有關的資訊(例如顯示在頁面上顯示返回的結果 )
對於開發人員來說,底層的互動過程是非常複雜的,ASP.NET則將互動的處理 過程進行了抽象化,這樣使得開發人員可以直接建立表層的用戶端回調,而無需 考慮底層的操作是如何?的。
下面的執行個體中,頁面中放置了一個文字框,一個提交按鈕和一個標籤。文本 框是用來接受使用者的輸入資訊,在單擊提交按鈕後將把文字框中輸入的資訊在標 簽上進行即時的顯示。注意,在輸入資訊後單擊提交按鈕時,並沒有像以前傳統 的提交方式那樣重新對頁面進行構建和重新整理。圖1-1為該執行個體的效果圖。