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 - 當控制元件繫結到資料來源時引發。

  • Disposed - 當頁面或控制元件被釋放時引發。

  • Error - 頁面事件,在丟擲未處理的異常時發生。

  • 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 按鈕、影像按鈕、連結按鈕、影像對映
Command OnCommand 按鈕、影像按鈕、連結按鈕
TextChanged OnTextChanged 文字框
SelectedIndexChanged OnSelectedIndexChanged 下拉列表、列表框、單選按鈕列表、複選框列表。
CheckedChanged OnCheckedChanged 複選框、單選按鈕

某些事件會導致表單立即回發到伺服器,這些稱為回發事件。例如,Click 事件,例如 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/>";
      }
   }
}

執行頁面。標籤顯示頁面載入、頁面初始化和頁面預呈現事件。點選按鈕檢視效果

ASP.NET Event Example
廣告