没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-09-27 12:06:57.000|阅读 929 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
前面几篇文章讲解了与利用 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所示,在客户端计算机中,用户单击购物车的 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 的方法和思路进行开发。下面一篇文章,笔者将通过典型示例介绍服务器控件捕获回传事件的实现方法。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:天极开发接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号