Asp.net 简明教程

ASP.NET - Event Handling

事件是可以操作或发生的事件,比如鼠标点击、按键、鼠标移动或任何系统生成的通知。进程是通过事件来通信的。例如,中断是由系统生成的事件。当事件发生时,应用程序应该能够响应并管理它。

在 ASP.NET 中,事件在客户端计算机中引发,而在服务器计算机中处理。例如,用户点击了在浏览器中显示的一个按钮。这样会引发 Click 事件。浏览器会通过将其发布到服务器来处理这个客户端事件。

服务器有一个子例程,用来描述在引发事件后应该做什么;它被称为事件处理程序。因此,当事件消息传输到服务器时,它会检查 Click 事件是否具有关联的事件处理程序。如果有,则会执行事件处理程序。

Event Arguments

ASP.NET 事件处理程序通常采用两个参数,并返回 void。第一个参数表示引发事件的对象,第二个参数是事件参数。

一个事件的一般语法是:

private void EventName (object sender, EventArgs e);

Application and Session Events

最重要的应用程序事件是:

  1. Application_Start - 当应用程序/网站启动时引发。

  2. Application_End - 当应用程序/网站停止时引发。

类似地,最常用的会话事件如下:

  1. Session_Start - 当用户首次从应用程序请求页面时引发。

  2. Session_End - 当会话结束时引发。

Page and Control Events

常见的页面和控件事件如下:

  1. DataBinding - 当控件绑定到数据源时引发。

  2. Disposed - 当页面或控件释放时引发。

  3. Error - 这是一个页面事件,在引发未处理异常时发生。

  4. Init - 当页面或控件初始化时引发。

  5. Load - 当页面或控件加载时引发。

  6. PreRender - 当页面或控件即将呈现时引发。

  7. Unload - 当页面或控件从内存中卸载时引发。

Event Handling Using Controls

所有 ASP.NET 控件均作为类实现,并且当用户对控件执行某些操作时,会触发控件的事件。例如,当用户单击按钮时,将生成“单击”事件。为处理事件,提供了内置的属性和事件处理程序。事件处理程序经过编码以响应事件,并对其采取适当的操作。

默认情况下,Visual Studio 通过在 Sub 过程中包含 Handles 子句来创建事件处理程序。此子句命名该过程处理的控件和事件。

按钮控件的 ASP 标记:

<asp:Button ID="btnCancel" runat="server" Text="Cancel" />

单击事件的事件处理程序:

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)

   Handles btnCancel.Click

End Sub

也可以在不带 Handles 子句的情况下对事件进行编码。然后,该处理程序必须根据控件的适当事件属性来命名。

按钮控件的 ASP 标记:

<asp:Button ID="btnCancel" runat="server" Text="Cancel" Onclick="btnCancel_Click" />

单击事件的事件处理程序:

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

常见的控件事件有:

Event

Attribute

Controls

Click

OnClick

按钮、图像按钮、链接按钮、图像映射

Command

OnCommand

按钮、图像按钮、链接按钮

TextChanged

OnTextChanged

Text box

SelectedIndexChanged

OnSelectedIndexChanged

下拉列表、列表框、单选按钮列表、复选按钮列表。

CheckedChanged

OnCheckedChanged

Check box, radio button

某些事件会立即导致表单传回服务器,这些事件称为回传事件。例如,单击事件,例如 Button.Click。

有些事件不会立即传回服务器,这些事件称为非回传事件。

例如,更改事件或选择事件,例如 TextBox.TextChanged 或 CheckBox.CheckedChanged。非回传事件可以通过将它们的 AutoPostBack 属性设置为 true 来立即回传。

Default Events

Page 对象的默认事件是 Load 事件。同样,每个控件都有一个默认事件。例如,按钮控件的默认事件是 Click 事件。

可以在 Visual Studio 中创建默认事件处理程序,只需在设计视图中双击该控件。下表显示了常用控件的一些默认事件:

Control

Default Event

AdRotator

AdCreated

BulletedList

Click

Button

Click

Calender

SelectionChanged

CheckBox

CheckedChanged

CheckBoxList

SelectedIndexChanged

DataGrid

SelectedIndexChanged

DataList

SelectedIndexChanged

DropDownList

SelectedIndexChanged

HyperLink

Click

ImageButton

Click

ImageMap

Click

LinkButton

Click

ListBox

SelectedIndexChanged

Menu

MenuItemClick

RadioButton

CheckedChanged

RadioButtonList

SelectedIndexChanged

Example

本示例包含一个包含标签控件和按钮控件的简单页面。由于页面事件,例如 Page_Load、Page_Init、Page_PreRender 等的发生,它会发送一条由标签控件显示的消息。单击按钮时,会引发 Button_Click 事件,并且该事件也会发送一条要显示在标签上的消息。

创建一个新网站,然后从控件工具箱中将一个标签控件和一个按钮控件拖到该网站上。使用属性窗口将控件的 ID 分别设置为 .lblmessage. 和 .btnclick. 分别。将按钮控件的 Text 属性设置为“Click”。

标记文件 (.aspx):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
   Inherits="eventdemo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>Untitled Page</title>
   </head>

   <body>
      <form id="form1" runat="server">
         <div>
            <asp:Label ID="lblmessage" runat="server" >

            </asp:Label>

            <br />
            <br />
            <br />

            <asp:Button ID="btnclick" runat="server" Text="Click" onclick="btnclick_Click" />
         </div>
      </form>
   </body>

</html>

双击设计视图以转到代码隐藏文件。Page_Load 事件将自动创建,其中不包含任何代码。写下以下自解释的代码行:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace eventdemo {

   public partial class _Default : System.Web.UI.Page {

      protected void Page_Load(object sender, EventArgs e) {
         lblmessage.Text += "Page load event handled. <br />";

         if (Page.IsPostBack) {
            lblmessage.Text += "Page post back event handled.<br/>";
         }
      }

      protected void Page_Init(object sender, EventArgs e) {
         lblmessage.Text += "Page initialization event handled.<br/>";
      }

      protected void Page_PreRender(object sender, EventArgs e) {
         lblmessage.Text += "Page prerender event handled. <br/>";
      }

      protected void btnclick_Click(object sender, EventArgs e) {
         lblmessage.Text += "Button click event handled. <br/>";
      }
   }
}

执行此页面。标签显示页面加载、页面初始化和页面预渲染事件。单击按钮以查看效果:

asp.net event example