All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
解决sql server查询速度慢11个方法_[SQL Server教程]
数据库2005,日志收缩简便方法_mssql学习_编程技术
扩展Label控件(1),-,实现回发(Postback)功能_[Asp.Net教程]
为ASP.NET,MVC开发一些常用插件(一)——导航栏_[Asp.Net教程]
取得文件扩展名方法_[PHP教程]_0
对DataGridView数据控件进行绑定应用实例
PHP中与数组相关的函数摘录_php资料_编程技术
C#类的声明方法_[Asp.Net教程]
C#向Excel报表中插入图片的2种方法_[Asp.Net教程]
Visual C++ 6.0教程:函数的定义与调用
Reading number is top 10 pictures
Forced sex girl living abroad1
我国房地产真相
人造器官和铁肺人
上传几张色图
Absolutely shocked. National geographic 50 animal photographys7
初吻给了谁?
007 James. bond's new lover
The mother was a stay-at-home children too tired took three baby suicide
So beauty, will let you spray blood5
a pure sister
Download software ranking
Unix video tutorial20
I for your crazy
仙剑奇侠传98硬盘WINXP版
传奇私服架设教程-chm
Tram sex maniac 2 (H) rar bag14
Boxer's Top ten classic battle5
徐若瑄成名作“魔鬼天使”
Eclipse-CALMSANNY (second edition)
asp.netWeb服务器高级编程
Boxer Classic video3
delv published in(发表于) 2014/1/6 9:01:46 Edit(编辑)
ASP.NET2.0服务器控件开发之实现事件_[Asp.Net教程]

ASP.NET2.0服务器控件开发之实现事件_[Asp.Net教程]

ASP.NET2.0服务器控件开发之实现事件_[Asp.Net教程]

前面几篇文章讲解了与利用ASP.NET 2.0技术创建自定义服务器控件属性有关的内容。从本文开始,包括随后的几篇文章将探讨创建自定义服务器控件事件的方法。本文重点对实现控件事件的基本概念进行介绍,这些概念对于帮助开发人员为服务器控件创建事件有着重要意义。

  1. 事件基本概念


  事件是当有动作发生或者状态改变时,类发出的信息或者通知。通常情况下,状态的发生或者改变由用户界面动作初始化,例如,单击按钮,或者由于其他的程序逻辑引起。产生事件的类或者说发送通知的类叫做事件源sender,接收事件的类叫做事件接收者receiver。二者之间通过委托(delegate)实现关联。下面列举了一段常见的应用事件代码。


// 声明事件
ClickcustomControl.Click += new EventHandler(this.customControl1_Clicked);
// 实现事件处理程序
customControl1_Clicked(object sender,EventArgs e){......}


  如上代码列举了服务器控件声明事件和实现事件处理程序的过程。由于这个过程非常简单,在此将不多做解释。另外,在实际应用中,开发人员通过为服务器控件实现事件机制,可以不采用以上的声明事件方式,而是在控件声明标记中仅仅列出"onClick = customControl1_Clicked"即可。实际上,事件的声明和具体事件处理程序的实现都是比较简单易用的。然而,为控件实现事件机制却不是一件容易的事情。


  从服务器控件开发的角度而言,控件事件(仅指服务器端事件,而不包括客户端事件)可能来自两个方面:一是从基类继承的事件。例如,假设自定义控件从Button类继承,那么该控件将继承基类的Click事件。二是根据开发需求而创建的自定义事件。下面分别对这两种事件进行介绍。


  2. 实现从基类继承的事件


  众所周知,自定义服务器控件归根结底是从System.Web.UI.Control派生而来。该基类中已经定义了一些事件。因此,在创建服务器控件过程中,很可能需要重写以下继承的多个事件。


  ·DataBinding事件:该事件当服务器控件绑定到数据源时发生,其对应事件处理程序为OnDataBinding。


  ·Disposed事件:该事件当从内存释放服务器控件资源时发生,其对应的事件处理程序为OnDisposed。这是服务器控件生命周期的的最后阶段。


  ·Init事件:该事件当服务器控件初始化时发生,其对应的事件处理程序为OnInit。Init事件是控件生命周期的第一步。


  ·Load事件:该事件当服务器控件加载到Page对象中时发生,其对应的事件处理程序为OnLoad。


  ·PreRender事件:该事件在加载Control对象之后、呈现之前发生,其对应的事件处理程序为OnPreRender。


  ·Unload事件:该事件当服务器控件从内存中卸载时发生,其对应的事件处理程序为OnUnload。


  以上内容针对Control基类的几个事件进行了简要说明。由于服务器控件均继承自Control基类(WebControl也是继承自Control类),因此,开发人员完全可以重写事件所对应的事件处理程序,这样便可以实现一些自定义内容。


  若要实现自定义继承的事件,需要重写从基类继承的受保护的OnEventName方法,而不必附加委托(EventHandler)。通常情况下,重写的事件处理程序应该调用基类的OnEventName方法,以确保调用附加到事件的委托(除非不想调用这些委托)。以下代码片段说明自定义控件重写继承的DataBinding事件的处理过程。


protected override void OnDataBinding(EventArgs e)
{
 //添加一些自定义逻辑代码
 //调用基类方法
 base.OnDataBinding(e);
}


  如上代码所示,在重写事件处理程序OnDataBinding过程中,首先需要添加一些根据应用需求而实现的自定义逻辑代码,然后,一定要牢记需调用基类方法。


  以上内容对Control基类的事件和派生类重写对应事件处理程序的过程进行了介绍。需要读者注意的是,上文并非说明自定义服务器控件仅能够重写以上几个来自Control基类事件的事件处理程序。如果自定义控件继承自其他原本带有事件的基类,例如,Button、DataList等(归根到底,它们也是从Control基类继承),那么继承的事件处理程序仍然可以被重写,例如,继承自Button类的控件自然获得Click事件,并且可以重写onClick事件处理程序。


  3. 创建自定义服务器控件事件


  在介绍创建自定义服务器控件事件的方法之前,我们首先来简单回顾一下相关的事件模型。


  在Web窗体页面中,与服务器控件关联的事件由客户端引发并由Web服务器处理(注意:事件必须称为"引发",而不要使用"触发"和"激发"等词,它们都是不准确,不规范的)。对于在客户机上由服务器控件引发的事件,ASP.NET 2.0事件模型收集有关请求的信息,并使用HTTP Post将详细信息传递到服务器。服务器上的Page Framework对该公告作出解释以确定发生的事件,然后,调用适当的处理程序方法。下图1简单说明了这一过程。



图1


  如图1所示,在客户端计算机中,用户单击购物车的Add(添加)按钮,试图将所选商品放入购物车中。在单击之后,事件模型收集了相关信息,例如,Submit = btnAddToCart,Prod3 = Gizmo等等,将这些信息通过Post方式传递到服务器。服务器在接收这些信息后,首先对其进行分析,然后,调用事件处理程序btnAddToCart(obj,event)进行处理。以上就是基本的事件处理模型。


  对于普通应用程序开发人员而言,只需要实现控件的事件处理程序即可,更进一步的信息对于他们而言是隐藏的,而且也是没有必要作更多关心的。然而,作为服务器控件开发人员,则必须仔细考虑这一事件处理模型。


  如果读者仔细思考以上过程,则会发现两个在事件处理模型中需要解决的重要问题。第一,服务器端如何捕获回传的单击事件,第二,通过Post方式回传到服务器端的数据,具体是如何处理的。以上两个问题至关重要。如果能够解决好这两个问题,那么创建自定义服务器控件事件则变得非常容易。


  为了解决以上问题,ASP.NET 2.0提供了两个重要接口:IPostBackEventHandler和IPostBackDataHandler。IPostBackEventHandler接口用于处理由客户端引发的页面回传的事件。实现此接口,服务器控件可将客户端的提交表单事件对应到服务器端的事件上,并且通过事件处理程序完成对该客户端事件的处理。IPostBackDataHandler接口用于检查提交给页面的数据,并确定是否在客户端修改过。当控件实现该接口,控件则自动具有了参与回传数据的处理能力。开发人员可以通过实现接口相关成员,完成针对回传数据的处理逻辑。


  实际上,ASP.NET 2.0中绝大多数服务器控件都引发从客户端到服务器的回传,并且读者实现的很多服务器控件也必须引发回传。因此,以上两个接口对于实现控件事件非常重要。对于它们,本节仅简单介绍一下。在随后的文章中,读者将通过典型示例,详细了解实现接口成员,捕获回传事件,处理回传数据的具体方法。


  另外,ASP.NET 2.0增强了有关回调处理方面的功能。例如,使用System.Web.UI.ICallbackEventHandler接口和Page.GetCallbackEventReference方法等。通过这些对象的应用可实现在客户端运行服务器端代码,从而避免丢失客户端状态并且不导致服务器往返的处理开销。这些内容与服务器控件事件之间有着一些联系。然而,由于回调应用在服务器控件中应用较少。因此,将不作过多说明。


  4. 小结


  从技术发展的角度来讲,ASP.NET技术从1.x升级到2.0版本,在服务器控件事件开发方面没有任何明显的修改。如果读者已经了解了ASP.NET 1.x下创建服务器控件事件的内容,那么可以按照过去1.x的方法和思路进行开发。下面一篇文章,笔者将通过典型示例介绍服务器控件捕获回传事件的实现方法。


作者:金属边缘 来源:天极开发





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.