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的方法和思路进行开发。下面一篇文章,笔者将通过典型示例介绍服务器控件捕获回传事件的实现方法。
查看本文来源