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
最重要的应用程序事件是:
-
Application_Start - 当应用程序/网站启动时引发。
-
Application_End - 当应用程序/网站停止时引发。
类似地,最常用的会话事件如下:
-
Session_Start - 当用户首次从应用程序请求页面时引发。
-
Session_End - 当会话结束时引发。
Page and Control Events
常见的页面和控件事件如下:
-
DataBinding - 当控件绑定到数据源时引发。
-
Disposed - 当页面或控件释放时引发。
-
Error - 这是一个页面事件,在引发未处理异常时发生。
-
Init - 当页面或控件初始化时引发。
-
Load - 当页面或控件加载时引发。
-
PreRender - 当页面或控件即将呈现时引发。
-
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/>";
}
}
}
执行此页面。标签显示页面加载、页面初始化和页面预渲染事件。单击按钮以查看效果: