探讨微软ASP.NET AJAX控件开发技术(客户端)

豆豆网   技术应用频道   2007年09月11日  【字号: 收藏本文

内容摘要:本系列文章将通过具体的实例从客户端和服务端两个角度全面探讨ASP.NET AJAX框架中的控件(Control)开发所涉及的技术。

  (九) 事件

  在控件类中添加事件类似添加属性。首先,在控件构造器中把事件处理器声明为一个私有变量并在原型对象中创建相应于该事件的一个add/delete方法对。尽管并不要求在模块级声明事件处理器变量,但是,这样做的确存在一些优点,我将在Ajax框架的Function.createDelegate()节讨论这个问题。当添加/删除事件时,Ajax框架总是自动地添加上add_和remove_前缀。因此,当添加事件订阅代码时,该方法应该以add_eventName方式命名;反之,以remove_eventName方式命名。例如,在上面的click事件示例中,我们以add_click和remove_click形式添加事件订阅方法,但是在$create语句中,我们以click方式对它命名,由Ajax框架负责添加add_前缀。如你在上面的示例所见,add_click和remove_click都引用了this.get_event()(继承自Sys.Component)。这个Sys.Component类维持着一个订阅事件的内部列表,存储于一个Sys.EventHandlerList类的实例(以及各自它们的处理器)中。

  除了这个get_event()方法对外,还推荐使用raiseEventName方法来激发事件。由于上面所举的仅是一个很基本的例子,所以,我没有在其中使用它。但是,当你想从多处激发同一个事件时你必须添加它。当激发一个事件时,我们可以传递一些称为事件参数的上下文数据。

  在事件中传递参数的推荐的方法是,创建一个继承自Sys.EventArgs的新类并构造器中传递要求的参数。针对每一个参数,它将在原型对象部分暴露getter和setter。因为本例非常简单,所以,没有使用这种更一般的方式。

  当前在该微软Ajax库中相应于事件参数存在两个内置类—Sys.EventArgs和Sys.CancelEventArgs。即使你有一个不需要任何事件参数的事件,那么,你也应该传递Sys.EventArgs.Empty(例如在上面的ImageButton控件示例中),以便事件订阅者可以遵循相同的模式来处理所有的事件。

来源:IT168    作者:朱先忠    责编:豆豆技术应用

正在加载评论...