快速业务通道

庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
样才能做到这一点呢?

两次页面请求之间的数据关联性问题,ASP.NET是通过视图机制实现的。简单地讲,视图区域信息(ViewState)存储在页面上的一个隐藏字段,里面存储每次需要视图机制保存的一些信息,每次提交时,它都会以"客户端到服务端"的形式来回传递一次,当处理完成后,最后会以处理后的新结果作为新的视图信息存储到页面中的隐藏字段,并与页面内容一起返回到客户端。后面会有针对视图状态机制的专门讲解,这里仅了解其功能即可。

有了视图机制,在其基础之上的数据回发机制就是完成处理视图信息的功能。具体过程是,服务端控件只要实现 IPostBackDataHandler接口,则当客户端提交请求后,就会有机会利用IPostBackDataHandler接口的 LoadPostData方法,在该方法内部处理子控件的新旧值逻辑,而视图信息数据这时以一个集合对象形式作为LoadPostData参数,并可以决定是否引发控件值变化后的事件。这就是要引入数据回发机制功能的原因。

通过上面两小节的讲解,您应该对事件和数据回发机制有了比较系统的认识。这样会较容易理解接下来要讲的事件和数据回发机制的具体使用和实践部分内容。

5.2 事件和数据回发机制的实现

5.2.1 客户端回传事件接口IPostBackEventHandler

要使控件捕获回发事件,控件必须实现System.Web.UI.IPostBackEventHandler 接口。此接口约定允许控件在服务器上引发事件来响应来自客户端的回发。IPostBackEventHandler接口包含一个方法。

/// <summary> 
/// 获得本书更多内容,请看: 
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx 
/// </summary> 
public interface IPostBackEventHandler 
{ 
  void RaisePostBackEvent(string eventArgument); 
}

参数eventArgument表示要传递到事件处理程序的可选事件参数,一般通过此参数可以确定不同的引发事件源,进而作不同的逻辑处理。在本章最后有个例子说明eventArgument参数用法。回发后,页框架就会搜索发送的内容,并确定发送的名称是否与实现 IPostBackEventHandler的服务器控件的UniqueID对应。如果对应,页框架就会在该控件上调用 RaisePostBackEvent方法(在引发更改事件后)。

以下代码片段显示了在服务器上引发Click事件的RaisePostBackEvent实现:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
public void RaisePostBackEvent(String eventArgument)
{
   ButtonEventArgs e = new ButtonEventArgs(eventArgument);
   OnClick(this, e);
}

在该方法中主要完成调用OnClick(e)事件功能,其中包含两个参数:第一个参数为当前控件本身(即一般事件体中sender,类型一般为object);第二个参数e为ButtonEventArgs参数类型对象,是继承于System.EventArgs类实现的参数类,在该类中可以定义与代码逻辑相关的任意属性,作为事件体的参数。

最后,RaisePostBackEvent需要被客户端引发才能够执行,下面是一段能够引发服务端事件的代码:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void Render(HtmlTextWriter output)
{
   output.Write("<INPUT TYPE=submit name=" + this.UniqueID +
     " Value=''Click Me'' />");
}

这段代码输出一个HTML的button标签,并设置为提交类型。非常重要一点是,不要忘记设置其name属性,因为当回发后,页框架就会搜索发送的内容,并确定发送的名称是否与实现I

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号