本節為你介紹ASP.NET事件處理。
事件是一個動作或發生的事,例如滑鼠點擊、按鍵、滑鼠移動,或任何系統產生的通知。一個進程透過事件進行溝通。例如,中斷是系統產生的事件。當事件發生,應用程式也能夠回應和管理。
ASP.NET 上的事件在使用者機器上引發,在伺服器上處理。例如,一個使用者點擊了在瀏覽器中顯示的一個按鈕。一個點擊事件被引發。瀏覽器透過把它發送給伺服器從而處理這個客戶端事件。
伺服器有一個子程序來描述當事件被引發時該做什麼;這個被稱為事件處理程序。因此,當事件資訊傳遞給伺服器,它會檢查點擊事件是否與事件處理程序有關聯。如果有關聯的話,事件處理程序就會被執行。
ASP.NET 事件處理程序一般採用兩個參數並傳回空。第一個參數代表了物件激發事件,第二個參數是事件參數。
一個事件的一般句法是:
private void EventName (object sender, EventArgs e);
最重要的應用程式事件是:
Application_Start - 當開啟應用程式或網頁時被引發。
Application_End - 當停止應用程式或網頁時被引發。
同樣的,最常使用的會話事件是:
Session_Start – 當使用者最開始從應用程式請求一個頁面被引發。
Session_End – 當會話結束後被引發。
常見的頁面和控制事件有:
DataBinding – 當一個控制項綁定到一個資料來源時被引發。
Disposed – 當釋放頁面或控制項時被引發。
Error – 它是一個頁面事件,當有未處理的異常時發生。
Init – 當初始化頁面或控制項時被引發。
Load – 當載入頁面或控制項時被引發。
PreRender – 當顯示頁面或控制項時被引發。
Unload – 當從記憶體卸載頁面或控制項時被引發。
所有的ASP.NET 控制項作為類別而實現,並且當使用者對其執行一個特定的動作時,它們會引發事件。比如說,當一個使用者點擊了一個按鈕,那就產生了'Click' 事件。對於處理事件來說,有內建屬性和事件處理程序。事件處理應用程式被編碼作為一個事件的回應,並且對其採取適當的行動。
預設情況下,Visual Studio 會建立一個事件處理程序,包括處理條款的子程序。這個子句命名程式處理的控制項和事件。
button 控制項的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.ClickEnd Sub
一個事件同樣可以在沒有Handles 子句的前提下被編碼。然後,處理程序必須根據適合控制項屬性的適當事件進行命名。
button 控制項的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 | 按鈕,圖像按鈕,連結按鈕,圖像導位圖 |
Command | OnCommand | 按鈕,圖像按鈕,連結按鈕 |
TextChanged | OnTextChanged | 文字方塊 |
SelectedIndexChanged | OnSelectedIndexChanged | 下拉選單,列錶框,單選按鈕列表,帶複選框的列錶框 |
CheckedChanged | OnCheckedChanged | 複選框,單選按鈕 |
一些事件導致表單立即傳回伺服器,這些被稱為回調事件。例如,點擊事件像Button.Click。
有些事件則不會被立即傳回伺服器,這些被稱為非回呼事件。
例如,改變事件或選擇事件,像TextBox.TextChanged 或CheckBox.CheckedChanged。這些非回呼事件可以透過設定它們的AutoPostBack 屬性為true 便可立即使它們回呼。
頁面物件的預設事件是載入事件。相似地,每個控制項都有一個預設的事件。例如,按鈕控制項的預設事件就是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. and .btnclick。設定按鈕控制項的文字屬性為「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/>"; } }}
執行頁面。標籤顯示頁面加載,頁面初始化以及頁面預覽事件。點擊按鈕看效果: