快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
PostBackEventHandler的服务器控件的UniqueID对应。如果对应,页框架就会在该控件上调用RaisePostBackEvent方法;反之,如果没有设置按钮的name值为UniqueID属性值,当单击按钮时页框架就不会引发该控件的RaisePostBackEvent方法,因为只有名称为UniqueID(服务器控件服务端ID)的按钮才会被注册为具有 IPostBackEventHandler接口功能的控件。

下面通过一个简单的完整例子,了解事件回发处理机制,代码如下:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
[DefaultEvent("Click")]
[ToolboxData("<{0}:PostBackEventControl runat=server></{0}:PostBackEventControl>")]
public class PostBackEventControl : Control, IPostBackEventHandler
{
   public event EventHandler Click;
   protected virtual void OnClick(EventArgs e)
   {
     if (Click != null)
     {
       Click(this, e);
     }
   }
   public void RaisePostBackEvent(string eventArgument)
   {
     OnClick(EventArgs.Empty);
   }
   protected override void Render(HtmlTextWriter output)
   {
     output.Write("<INPUT TYPE=submit name="+this.UniqueID+"Value=''单击我''
     />");
   }
}

该控件内容比较简单,仅输出一个提交类型的按钮,由于这个按钮类型为submit,所以当单击按钮时,其本身已经可以提交事件到服务器,但仅仅这样主控件还不能够捕捉到该按钮事件。控件能够捕捉处理该事件需要具备两个条件:第一,主控件继承了 IPostBackEventHandler接口以及实现了RaisePostBackEvent方法;第二,必须有name值为UniqueID的客户端标签,页框架只认识控件的name属性。只有这两个条件同时具备才能够使控件具备捕捉并处理事件的机会。

语句 [DefaultEvent("Click")]的功能是定义Click事件为默认事件。通常把最常用的一个事件定义为默认事件,如果定义了默认事件,在设计器中双击控件时系统会自动从源代码视图(*.aspx)切换到后面代码(*.cs)页面,并可以自动注册默认事件;否则,仅切换到后台代码,但不注册任何事件。

类代码中最上面的一句:

public event EventHandler Click;

这条语句定义了一个委托事件。EventHandler是一个预定义的委托,专用于表示不生成数据的事件的事件处理程序方法。如果事件生成数据,则必须提供自定义事件数据类型,并且必须要么创建一个委托(其中第二个参数的类型为自定义类型),要么使用泛型EventHandler委托类并用自定义类型替代泛型类型参数。

在5.1.1节讲过事件的意义及其完成的功能,即在一个类中执行另一个功能类的功能,要想执行另一个类中的某个功能方法,必定要在当前类中保留另一个方法的引用,委托和事件就是为实现此功能而出现的。委托类似于C++中的函数指针,它一般指向一个方法。这样,当调用本类中的委托就相当于调用了另一个类中的方法。

若要将事件与处理事件的方法关联,请向事件添加委托的实例和委托事件实例,如:

this.Button1.Click +=new EventHandler(Button1_Click);

除非移除了该委托,否则每当发生该事件时就调用事件处理程序。

另外,委托的应用比较广泛,还有更加复杂的应用,比如定义一个委托可以同时指向多个事件,即一个委托指定一个事件列表,当调用委托时可以执行一系列的事件。这里限于篇幅就不多讲了,更多关于事件委托概念请查看微软官方文档,那里面已经讲得很详细了。

5.2.2 客户端回发/回调揭密

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