《Programming ASP.NET》学习笔记(事件)

事件

执行程序有两种模式:线性模式和事件驱动模式。
理解ASP.NET的关键是,它是事件驱动模式。

线性模式的程序从第一步开始执行,然后执行第二步等,直至所有步骤执行完为止。
就本质而言,一旦程序开始执行,在用户或系统的操作下,它将一直运行下去。

事件驱动模式的程序是当发生某些事情时进行响应(例如按下了按钮)。
多数情况下,事件由用户行为生成,但是由系统触发。

在ASP.NET中,对象可以触发事件,而其他对象可以定义事件处理程序。
服务器控件是可以触发事件的对象。
用户在浏览器上对服务器控件所执行的任何行为都可能触发事件。
服务器端代码响应事件,并运行存储在事件处理方法中的代码。

 

ASP.NET事件

所有的ASP.NET事件都在服务器端处理。
有些事件立刻发送到服务器,另外有一些事件则被存储,直到下次页面回传到服务器。
在ASP.NET应用程序中,事件通常都在客户端触发,但在服务器上处理。

考虑一个包含按钮控件的ASP.NET页面。当单击该按钮时,触发了一个Click事件。不同于HTML按钮控件,ASP.NET的按钮有一个runat=server属性,它为所有HTML按钮的标准功能添加服务器端处理属性。

当触发Click事件时,浏览器则发送页面到服务器,处理客户端事件。
事件消息通过HTTP POST方式发送到服务器。
如果服务器端有关联的事件处理程序,则在服务器端执行该事件处理程序。

许多事件,如MouseOver,不会进行服务器端事件处理,因为那样做会降低性能。

提示:可以为服务器控件添加客户端处理,它们是运行在ASP.NET基本架构的终端之上的。

 

事件参数

事件依靠委托实现。
委托是一个对象,它封装了对方法的描述,即处理事件所指定的任务。

所有ASP.NET事件处理程序都有两个参数,并且返回空值。
第一个参数表示触发事件的对象。习惯性的称之为sender,尽管这不是必要的。
第二个参数称作事件参数,它包括事件信息的细节,如果有的话。对于多数事件,事件参数是EventArgs类型,它没有任何属性
格式:
private void EventName (object sender, EventArgs e)

对于某些控件,事件参数可以从EventArgs类派生,并显示该事件类型的属性细节。
例如,AdRotator控件的AdCreated事件处理程序,接收AdCreatedEventArgs类型的参数,它有AdProperties、AlternateText、ImageUrl和NavigateUrl属性。

 

应用程序事件和会话事件

ASP.NET支持应用程序事件和会话事件,这二者为传统ASP程序员所熟知。

应用程序事件
当应用程序启动时,将触发Application_Start事件。
当应用程序停止时,将触发Application_End事件。

会话事件
当用户第一次请求应用程序的页面时,会话开始,触发Session_Start事件。
当应用程序关闭会话或会话超时,会话结束,触发Session_End事件。

 

页面和控件事件

页面和控件都包含事件,它们继承自control类(在Error事件的情况下,则继承自TemplateControl类)。
所有这些事件都传递没有属性的EventArgs类型的事件参数。

事件名称 说明
DataBinding 当控件绑定到数据源时发生
Disposed 当控件从内存中释放时发生
Error  只在页面中;当抛出未处理的异常时发生
Init  当控件初始化时发生
Load  当控件加载到页面对象时发生
PreRender 当控件准备做输出时发生
Unload  当控件从内存中卸载时发生

提示:将控件绑定到数据源意味着控件和数据源联系在了一起,所以,控件知道使用数据源构建自身。

 

回传事件vs非回传事件

回传事件促使表单立刻回传到服务器。
非回传事件并不立刻回传到服务器。这些事件由控件捕获,直到再次发生回传。

设置非回传事件控件的AutoPostBack属性为true,则可以强制使它们采用回传方式。

回传控件 非回传控件
Button  BulletedList
Calendar CheckBox
DataGrid CheckBoxList
DataList DropDownList
FileUpload ListBox
GridView RadioButtonList
ImageButton RadioButton
ImageMap TextBox
LinkButton
Menu
Repeater

 

IsPostBack

Page对象具有IsPostBack属性,这是一个只读的Boolean类型属性。
它可以指示页面是第一次加载还是为了响应客户端回传而进行的加载。

您可以只在页面第一次加载时,执行一些耗费资源的操作。如果页面回传到服务器并再次加载,就无须重复这些操作了。因为,任何输入或构建的数据都已被保留到后续的回传中。
例如:
protected void Page_Load(Object sender, EventArgs e)
{
   if (! IsPostBack)
   {
      //仅在页面第一次加载时,执行重要操作
   }
}

 

Visual Studio 2005中的事件

Visual Studio 2005(VS2005)IDE能自动处理ASP.NET实现事件过程中的大量工作。
如果选择实现一个事件,只需输入对应事件处理程序的名称。此时,IDE将创建所需的模板代码,并绑定相关委托。

当新建一个Web应用程序时,VS2005将自动包含下面的代码,以便处理页面加载事件:
protected void Page_Load(object sender, EventArgs e)
{
}

每个页面都包含多个类似于Page_Load的、可创建处理程序的事件。这些预定义的事件处理程序的名称由Page_连接事件名组成。因此,下面的事件处理程序会自动关联到它们相对应的事件:
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

自定义事件
添加控件后,在“Design”视图中单击控件,然后,单击“Properties”窗口中的事件按钮(闪电图标),将会看到控件的事件。
在这种情况下,双击Click事件旁的空白,VS2005则命名一个Button1_Click(控件名_事件名)事件。同时,创建事件处理程序的构架,并且光标处于该事件处理程序中。

每种控件都有一个默认事件,它多数是该类型控件最常实现的事件。
可以通过在“Design”视图中,双击控件来创建默认事件的处理程序。

部分ASP.NET控件的默认事件
控件  默认事件
AdRotator AdCreated
BulletedList Click
Button  Click
Calendar SelectionChanged
CheckBox CheckedChanged
CheckBoxList SelectedIndexChanged
DataGrid SelectedIndexChanged
DataList SelectedIndexChanged
DropDownList SelectedIndexChanged
HyperLink Click
ImageButton Click
ImageMap Click
Label  None
LinkButton Click
ListBox  SelectedIndexChanged
Menu  MenuItemClick
RadioButton CheckedChanged
RadioButtonList SelectedIndexChanged
Repeater ItemCommand

 

多个控件共用一个事件处理程序

一个事件处理程序可以处理来自多个不同控件的事件。
通过测试sender参数值,可以确定触发事件的具体对象。
例如:
private void BtnClick(object sender, System.EventArgs e)
{
   Button b = sender as Button;
   String buttonID = b.ID;
   switch (buttonID)
   {
      case "btnDoThis":
         //  DoThis的代码
      case "btnDoThat":
       //  DoThat的代码
   }
   //  所有按钮的通用代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值