上節概述:
上節中主要總結了事件處理的機制、控件事件回發、服務端回發事件的捕獲及 處理和異步回調等幾個方面。
接下來本文將為大家描述“數據回發”的相關細節。
1.IPostBackDataHandler接口
我們封裝的控件如果要實現數據回發功能的話,就必須繼承 IPostBackDataHandler接口並實現接口方法。該接口方法只有兩個:
代碼
1 #region IPostBackDataHandler 成員
2 public bool LoadPostData(string postDataKey,
3 System.Collections.Specialized.NameValueCollection postCollection)
4 {
5 throw new NotImplementedException();
6 }
7
8 public void RaisePostDataChangedEvent()
9 {
10 throw new NotImplementedException ();
11 }
12 #endregion
其中,當客戶端觸發回發事件時,控件首先處理LoadPostData()方法將頁面兩 次新舊值進行對比分析,返回true或false。如果新舊值不等返回true,相等則返 回false。當然返回true或false是用控件開發人員自己決定的。但LoadPostData ()方法返回的 true和false是與後文有直接關系的——返回true時,ASP.NET框架 將自動調用RaisePostDataChangeEvent()方法進行必要事件處理;返回false則不 會調用RaisePostDataChangeEvent()方法。
上文中提到了控件的新舊值,那麼舊值存儲在哪裡?新值又怎樣的被傳入呢? 分析下LoadPostData()方法的兩個參數,其中第一個是 String類型的,第二個是 NameValueCollection類型的;可知第二個參數是一個集合類型的參數,所以上文 提到的新值或者舊值很有可能包含在其中。
為了檢驗我們的猜疑,下面還是以一個實例來探討下。
(1).新建一個服務器控件開發工程(命名為PostDataControl)和一個測試項 目。
(如果有不清楚的請參照上節——ASP.NET服務器控件封裝-【事件】-1.1【事 件回發,異步回調】)。