ASP.NET编程之事件Events

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

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

事件参数(EventsArguments)

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

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

privatevoidEventName(objectsender,EventArgse)

应用程序和会话事件(ApplicationandSessionEvents)

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

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

页面和控件事件(PageandControlEvents):

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

Eventname

Description

DataBinding

Occurswhenthecontrolbindstoadatasource

Disposed

Occurswhenthecontrolisreleasedfrommemory

Error

Forthepageonly;occurswhenanunhandledexceptionisthrown

Init

Occurswhenthecontrolisinitialized

Load

OccurswhenthecontrolisloadedtothePageobject

PreRender

Occurswhenthecontrolisabouttoberendered

Unload

Occurswhenthecontrolisunloadedfrommemory

回发事件VS非回发事件(PostbackVersusNon-PostbackEvents:

回发事件(PostbackEvents)是指时间激发后要立即被投递至服务器端,一般是点击型事件,如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中的事件:

VS2005IDE自动处理需要实现事件的大部分操作。当你创建一个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

多控件对应于一个事件处理器:(MultipleControlstoOneEventHandler)

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

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
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值