快速业务通道

ASP.NET服务器控件封装-【事件】-1.2【数据回发】

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-03

上节概述:

上节中主要总结了事件处理的机制、控件事件回发、服务端回发事件的捕获及 处理和异步回调等几个方面。

接下来本文将为大家描述“数据回发”的相关细节。

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

其中包含了一个默认的Text属性和Render()方法,还有IPostBackDataHandler 接口的两个空方法体。

(2).上图中我们可以看到Text属性的get方法中使用了ViewState对象,该对象 是Control基类中的一个属性,用来管理控件的视图状态的(后面的文章中将讲解 视图相关处理),而前面说过,数据回发是在视图状态基础之上实现的,该处就可 以说明这一点。

(3).值改变才能触发相关事件的控件,大家很容易就想到TextBox,这里也不 例外,在Render()方法中输入一下代码:

代码

1        protected override void Render (HtmlTextWriter output)
2         {
3              String PostBackJs =  Page.ClientScript.GetPostBackEventReference(this, "");
4              StringBuilder outString = new StringBuilder();
5              outString.Append("<Input type=''text''  name=''");
6             outString.Append (this.UniqueID);
7             outString.Append("''  value=\"");
8              outString.Append (HttpUtility.HtmlEncode(Text));
9              outString.Append("\" onblur=\"");
10              outString.Append(PostBackJs);
11              outString.Append(";\" ></Input>&quo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号