程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET中的自定義腳本回調

ASP.NET中的自定義腳本回調

編輯:關於ASP.NET

ASP.NET客戶端回調代表著一種簡潔而絕佳的方法,它可以在不發布和刷新當前頁的情況下執行服務器端代碼。我在2004年8月和12月的CuttingEdge專欄中討論了ASP.NET回調,當時是從對服務器進行後台回調、向相關頁發送輸入數據以及接收響應的呈現頁的角度對它們進行了討論。然後,響應字符串由合適的客戶端進行處理,並且通常通過動態HTML(DHTML)對象模型和嵌入到頁面中的回調JavaScript函數來操作呈現的頁面內容。

盡管回調的這種用法已經讓人非常激動了,但它們還可以執行更多的任務。腳本回調機制也可以為服務器控件添加高級功能。通過實現幾個接口,任何自定義控件都會被賦予腳本回調功能,以便使用後台往返來收集服務器數據以及更新用戶界面—這就是本月我要講述的主題。

受GridView控件的啟發

如果您讀過我最近寫的一篇功能文章ASP.NET2.0GridView,您就會了解GridView控件無需刷新整個頁面就可以顯示新的記錄頁。實際上,GridView控件提供了一個基於ASP.NET腳本回調進行分頁和排序的高級引擎。新頁面的數據是在後台下載的,用戶看不到。在數據到達客戶端之後,這些數據將立即由JavaScript函數收集,並用於更新當前視圖。

分頁和排序回調並不是100%的客戶端回調解決方案(如果您需要一個純粹的客戶端實現,請參閱2004年2月JeffProsise在WickedCode專欄中發表的文章)。GridView的分頁和排序回調是按需工作的,它只下載需要的數據,而不會將整個數據源都下載到客戶端上。您仍然要付出一個往返的代價,但是能夠保證得到最新的數據,即使這些數據最近已經在服務器上更新過。

自從發現ASP.NET控件可以支持腳本回調功能之後,我感到非常興奮,同時也促使我趕緊找出構建自己的腳本回調的方法。

順便提一句,GridView並不是唯一一個支持類似功能的ASP.NET2.0控件。其他視圖控件(如TreeView、DetailsView和FormView)也能以其他方式提供相同的功能。作為使用具有回調功能控件的開發人員,您不需要處理服務器端代碼,也不用擔心編寫以及在宿主頁中嵌入JavaScript代碼的問題。該控件可以完成一切操作,它展示了一個直觀的編程模型,您可以通過該模型控制腳本回調機制。

控件腳本回調基本知識

ASP.NET腳本回調機制由兩個關鍵元素組成:響應用戶操作的服務器端代碼,以及客戶端上處理服務器端事件所生成結果的JavaScript回調代碼。在頁面回調自身的情況下,正如我在前面提到的文章中所述的那樣,您可以在執行對用戶不可見的回發的頁面按鈕中附加一些ASP.NET生成的腳本代碼。因為該請求的目標是當前頁,所以該頁會發布到自身,這與它在一個普通回發事件中的行為方式相似,只是頁面的生命周期縮短了。該頁必須實現ICallbackEventHandler接口,以便可以調用一個具有預定義簽名的方法,來為客戶端生成結果。

那麼,當控件觸發帶外調用時,該方案又有什麼不同呢?在這種情況下,“不可見”回發的目標URL是承載該調用方控件的頁面的URL。該控件必須實現ICallbackEventHandler才能提供為客戶端生成某些結果的方法。同樣,該控件負責在承載頁中插入處理結果和刷新該頁所需的任何JavaScript代碼。

具有回調功能的控件只是一個實現ICallbackContainer和ICallbackEventHandler接口的控件,兩個接口都各有一個方法。ICallbackContainer接口具有的方法可以返回觸發遠程調用的腳本代碼;ICallbackEventHandler接口則提供了在調用期間執行的服務器端代碼。ICallbackEventHandler也是一個具有回調功能的頁面必須實現的接口。一個實現回調接口的自定義控件示例的聲明如下面的代碼所示:

public class CallbackValidator : WebControl,
INamingContainer, ICallbackContainer, ICallbackEventHandler

在ICallbackContainer接口的實現中,您可能需要放入一個對該頁GetCallbackEventReference方法的調用,以獲得一個可啟動服務器事件的正確JavaScript調用。稍後我再講述這些內容。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved