ASP.NET - 事件处理
事件是一种操作或事件,例如鼠标单击、按键、鼠标移动或任何系统生成的通知。 进程通过事件进行通信。 例如,中断是系统生成的事件。 当事件发生时,应用程序应该能够响应并管理它。
ASP.NET 中的事件在客户端计算机上引发,并在服务器计算机上处理。 例如,用户单击浏览器中显示的按钮。 引发 Click 事件。 浏览器通过将客户端事件发布到服务器来处理该事件。
服务器有一个子例程,描述事件发生时要做什么; 它被称为事件处理程序。 因此,当事件消息传输到服务器时,它会检查Click 事件是否有关联的事件处理程序。 如果有,则执行事件处理程序。
事件参数
ASP.NET 事件处理程序通常采用两个参数并返回 void。 第一个参数表示引发事件的对象,第二个参数是事件参数。
事件的一般语法是:
private void EventName (object sender, EventArgs e);
应用程序和会话事件
最重要的应用程序事件是:
Application_Start - 当应用程序/网站启动时引发。
Application_End - 当应用程序/网站停止时引发。
同样,最常用的会话事件是:
Session_Start - 当用户首次从应用程序请求页面时引发。
Session_End - 会话结束时引发。
页面与控件事件
常见的页面和控件事件是:
DataBinding - 当控件绑定到数据源时引发。
Dispose - 当页面或控件被释放时引发。
错误 - 这是一个页面事件,当抛出未处理的异常时发生。
Init - 当页面或控件初始化时引发。
Load - 加载页面或控件时引发。
PreRender - 当要呈现页面或控件时引发。
Unload - 当页面或控件从内存中卸载时引发。
使用控件处理事件
所有 ASP.NET 控件均以类的形式实现,并且它们具有当用户对它们执行特定操作时触发的事件。 例如,当用户单击按钮时,会生成"Click"事件。 为了处理事件,有内置的属性和事件处理程序。 事件处理程序被编码为响应事件,并对其采取适当的操作。
默认情况下,Visual Studio 通过在 Sub 过程中包含 Handles 子句来创建事件处理程序。 该子句命名过程处理的控件和事件。
按钮控件的 ASP 标记:
<asp:Button ID="btnCancel" runat="server" Text="Cancel" />
Click 事件的事件处理程序:
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" />
Click 事件的事件处理程序:
Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) End Sub
常见的控制事件有:
| 事件 | 属性 | 控件 |
|---|---|---|
| Click | OnClick | Button, image button, link button, image map |
| Command | OnCommand | Button, image button, link button |
| TextChanged | OnTextChanged | Text box |
| SelectedIndexChanged | OnSelectedIndexChanged | Drop-down list, list box, radio button list, check box list. |
| CheckedChanged | OnCheckedChanged | Check box, radio button |
某些事件会导致表单立即回发到服务器,这些事件称为回发事件。 例如,Button.Click 等点击事件。
有些事件不会立即回发到服务器,这些事件称为非回发事件。
例如,更改事件或选择事件,例如 TextBox.TextChanged 或 CheckBox.CheckedChanged。 通过将 AutoPostBack 属性设置为 true,可以使非回发事件立即回发。
默认事件
Page 对象的默认事件是 Load 事件。 同样,每个控件都有一个默认事件。 例如,按钮控件的默认事件是 Click 事件。
只需在设计视图中双击该控件即可在 Visual Studio 中创建默认事件处理程序。 下表显示了一些常用控件的默认事件:
| 控件 | 默认事件 |
|---|---|
| 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 |
示例
此示例包括一个简单的页面,其上有一个标签控件和一个按钮控件。 当Page_Load、Page_Init、Page_PreRender等页面事件发生时,它会发送一条消息,由标签控件显示。 单击按钮时,将引发 Button_Click 事件,并且还会发送一条要在标签上显示的消息。
新建一个网站,从控件工具箱中拖拽一个标签控件和一个按钮控件到其上。 使用属性窗口,将控件的 ID 设置为lblmessage和btnclick。将Button控件的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/>";
}
}
}
执行页面。 该标签显示页面加载、页面初始化和页面预渲染事件。 点击按钮查看效果:

