Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET服务器控件封装-【事件】-1.2【数据回发】

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【事 件回发,异步回调】)。