首页 / 网页编程 / ASP.NET / 庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)
庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)2011-05-09 MSDN 郑健本章内容5.1 控件事件和数据回发概述5.2 事件和数据回发机制的实现5.3 复合控件的事件处理机制5.1 控件事件和数据回发概述在讲解实现控件事件和数据回发功能之前,有必要先了解一下相关的基本概念。5.1.1 事件及其意义要为控件定制事件,先得使用控件的事件。首先以经典的Button控件的OnClick事件为例子,说一下事件的使用模型。1.注册事件<asp:Button ID="Button1" runat="server"OnClick="Button1_Click"Text="Button"/>或在Page_Load中注册:protected void Page_Load(object sender, EventArgs e)
{
this.Button1.Click +=new EventHandler(Button1_Click);
}2.事件方法体protected void Button1_Click(object sender, EventArgs e)
{
}首先从事件要实现的功能角度理解事件。我们把按钮(Button)看做一个对象,把页面(Page)也看做一个对象。正向理解:假如我们在Page对象中要修改Button的行为,可以直接通过this.Button1的形式直接访问Button对象的属性或方法对 Button进行修改,可以理解为Page类能访问到Button代码功能。原因是Button1是Page类内部的一个对象,类当然可以直接访问其内部的对象。逆向理解:假如我们需要在Button中要访问Page中的代码呢?直接像上面那样通过this.Page的形式是不行的,因为 Button是Page类的内部对象,但Page不是Button类的内部对象,从面向对象角度讲,类(Button)不能访问其外部的对象(Page),也就是说在Button中不可能通过this.Page的形式访问到Page对象。而使用事件机制就可以解决此问题,即事件机制解决了面向对象编程中不允许类访问类外部代码问题。关于事件的应用本章后面会专门讲解,在这里仅介绍一下它的功能。更深层了解一下Button的事件:假如我们没有对Button注册Click事件,则Button会执行一遍它内部的Click相关逻辑,并没有对Page对象产生任何影响;如果我们为Button定义了Click事件(如上面代码片段),则Button还是执行一遍它内部的Click相关逻辑,不同的是在执行自己内部逻辑的过程中它还执行了Page对象中的一些代码功能(即Button的事件体Button1_Click方法),就达到了我们要实现的功能。通过触动一个对象 Button影响到另一个对象Page的行为,并且在Button的事件体中即可以修改Button本身(通过sender或 this.Button1),也可以修改Page页面对象的其他控件或执行任意想要的代码功能。其次从ASP.NET工作机制说一下它的工作原理,与桌面应用程序中的事件不同,ASP.NET服务器控件事件是在服务器上引发和处理的。当Web请求将客户端操作发送到服务器时,控件可以在服务器上引发事件来响应客户端操作。该页或其子控件对事件进行处理,然后ASP.NET将响应发送回客户端。这样,用户感觉就像在使用桌面应用程序一样。但是,控件开发人员必须了解只有一个客户端事件发送到服务器,即回发事件。有些在客户端执行的事件(如JavaScript定义的客户端事件)没有被发送到服务器,不能被服务端处理,这样的事件不是我们这一章要讲的事件,本章讲的是服务器控件事件,是由服务器来处理的事件。