代码改变世界

ASP.NET编程之事件Events

2012-07-06 09:23  java20130722  阅读(343)  评论(0编辑  收藏  举报

     程序运行大致有两种:一种是线性的;一种是事件驱动的。线性的是指程序从步骤1,到步骤2,到步骤3,一直延续,直到最后一个步骤结束。与线性不同的是,实现驱动编程时对正在发生的事情一种反应;例如按键被按下了,更一般的是,事件一般都由用户的行为产生的,不过有些事件也能被系统引起。

      ASP.NET有上千种事件,应用程序有事件,会话有事件,页面和大部分的服务器控件也能激起事件。所有的ASP.NET事件是在服务器端被处理的,一些事件是立即被投递到服务器端,有一些事件被保留知道下次页面被投递会服务器。由此,我们可以看出ASP.NET与传统的客户端应用程序的不同,传统的客户端程序,事件的激发和处理都在客户端,而在ASP.NET中事件一般是在客户端激发的都是在服务器端被处理。

事件参数(Events Arguments)

      事件是用delegate进行实现的。一个delegate是一个指定处理方的方法(method)描述的封装。

     按照传统,所有的ASP.NET处理器需要两个参数,没有返回值。第一个参数代表着激发事件的对象,一般它被称之为sender(尽管它有可能不需要);第二个参数称之为事件参数,包含事件的特殊信息,对于大多数参数,这种事件参数是一种EventArgs类型。因此一般的事件原型如下:     

      private void EventName (object sender, EventArgs e)

应用程序和会话事件(Application and Session Events)

     应用程序事件:当一个程序启动时会激发Application_Start Event,这时候是初始化应用程序资源的最佳时期;而当程序结束的时候会激发Application_End Event,这时候需要关闭系统资源等善后工作。

     会话事件:与应用程序相似,一个会话以从应用程序发出第一个页面请求为开始,以应用程序关闭会话或会话超时为结束。当会话开始时会激发一个Session_Start Event,同样的会话结束时会激发Session_End Event

页面和控件事件(Page and Control Events):

     页面(page)和控件(controls)都带有从Control class继承过来的事件(Event)。一些常见的页面和控件事件:

Event name

Description

DataBinding

Occurs when the control binds to a data source

Disposed

Occurs when the control is released from memory

Error

For the page only; occurs when an unhandled exception is thrown

Init

Occurs when the control is initialized

Load

Occurs when the control is loaded to the Page object

PreRender

Occurs when the control is about to be rendered

Unload

Occurs when the control is unloaded from memory

回发事件 VS 非回发事件 (Postback Versus Non-Postback Events:

      回发事件(Postback Events)是指时间激发后要立即被投递至服务器端,一般是点击型事件,如Button.Click;与之对应的是许多事件不需要立即被投递到服务器端,例如Text.TextChanged事件,这些事件被缓存后直到下次投递出现的时候一起被送至服务器端。常见的回发式控件和非回发式控件:

Postback

Non-postback

Button

BulletedList

Calendar

CheckBox

DataGrid

CheckBoxList

DataList

DropDownList

FileUpload

ListBox

GridView

RadioButtonList

ImageButton

RadioButton

ImageMap

TextBox

LinkButton


Menu


Repeater


IsPostBack属性:

     页面对象提供了IsPostBack属性,它是一个只读的属性值,代表着页面是被初次加载还是为了响应客户端回发事件而被重新加载的。有许多昂贵的操作只需在初次加载时被执行,如果是重新加载的话这些操作无需再次执行。例如:

protected void Page_Load(Object sender, EventArgs e)
    {
       if (! IsPostBack)
       {
          //  Do the expensive operations only the
          //  first time the page is loaded.
       }
    }


VS2005中的事件:

     VS2005 IDE自动处理需要实现事件的大部分操作。当你创建一个web 应用程序时,VS2005自动包含了代码嗅探器去处理页面加载事件:

Page_Load

Page_AbortTransaction

Page_CommitTransaction

Page_DataBinding

Page_Disposed

Page_Error

Page_Init

Page_InitComplete

Page_Load

Page_LoadComplete

Page_PreInit

Page_PreLoad

Page_PreRender

Page_PreRenderComplete

Page_SaveStateComplete

Page_Unload

多控件对应于一个事件处理器:(Multiple Controls to One Event Handler)

     一个事件处理器能够处理来自于不同控件的事件。例如以下代码:

private void BtnClick(object sender, System.EventArgs e)
    {
       Button b = sender as Button;
       String buttonID = b.ID;
       switch (buttonID)
       {
          case "btnDoThis":
             //  code to do this
          case "btnDoThat":
             //  code to do that
       }
       //  code to do stuff common to all the buttons
    }