ASP.NET服务器控件封装-【事件】-1.2【数据回发】2011-08-28 博客园 杨平上节概述:上节中主要总结了事件处理的机制、控件事件回发、服务端回发事件的捕获及 处理和异步回调等几个方面。接下来本文将为大家描述“数据回发”的相关细节。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【事 件回发,异步回调】)。
