快速业务通道

庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

本章内容

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定义的客户端事件)没有被发送到服务器,不能被服务端处理,这样的事件不是我们这一章要讲的事件,本章讲的是服务器控件事件,是由服务器来处理的事件。

5.1.2 数据回发机制

在 ASP.NET技术的服务器编程中,服务器处理完客户端的每个请求就认为任务结束,当客户端再次请求时,服务器会作为新的一次请求处理,即使是相同的客户端也是如此。也就是说服务器不会保存我们两次请求之间的一些前后相接的数据,这就比较麻烦了,比如当我们输入一些信息到一个文本中,然后提交一个按钮,很多时候我们要在按钮提交的服务端事件中处理提交之前的数据和提交按钮时用户输入的最新数据,即想同时得到文本框的旧值和新值,而服务端不会保存前一个请求的任何信息,那怎

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号