事件是一個動作或事件,如滑鼠點擊,按鍵,滑鼠移動或任何系統生成的通知。 一個過程通過事件進行通信溝通。例如,中斷是系統生成的事件。當事件發生時,應用程式應該能夠回應並管理它。
ASP.NET中的事件在客戶機上引發的,並在伺服器機器上處理。 例如,用戶點擊流覽器中顯示的按鈕。則點擊(Click)事件就會被被引發。流覽器通過將其發佈到伺服器,並由伺服器來處理這個客戶端事件。
伺服器有一個副程式描述事件發生時該怎麼做(處理); 它被稱為事件處理程式。 因此,當事件消息被發送到伺服器時,它檢查點擊(Click)事件是否具有關聯的事件處理程式。 如果有,則執行事件處理程式。
事件參數
ASP.NET事件處理程式通常需要兩個參數並返回void
。 第一個參數表示引發事件的對象,第二個參數表示事件參數。
事件的一般語法是:
private void EventName (object sender, EventArgs e);
應用程式和會話事件
ASP.Net中最重要的應用程式事件是:
- Application_Start - 當應用程式/網站啟動時引發。
- Application_End - 當應用程式/網站停止時引發。
同樣,最常用的Session
事件是:
- 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 |
複選框,單選按鈕 |
有些事件會導致表單被立即回發到伺服器,這些被稱為回發事件。 例如,點擊事件,如Button.Click
。
某些事件不會立即回發到伺服器,這些事件被稱為非回發事件。
例如,更改事件或選擇事件,如TextBox.TextChanged
或CheckBox.CheckedChanged
。 通過將其AutoPostBack
屬性設置為true
,可以使nonpostback
事件立即回發。
默認事件
Page
對象的默認事件是Load
事件。 同樣,每個控件都有一個默認事件。 例如,按鈕控件的默認事件是Click
事件。
只需在設計視圖中雙擊控件,即可在Visual Studio中創建默認事件處理程式。 下表顯示了一些常用控件的默認事件:
控件 | 默認事件 |
---|---|
AdRotator | AdCreated |
BulletedList | AClick |
Button | AClick |
Calender | ASelectionChanged |
CheckBox | ACheckedChanged |
CheckBoxList | ASelectedIndexChanged |
DataGrid | ASelectedIndexChanged |
DataList | ASelectedIndexChanged |
DropDownList | ASelectedIndexChanged |
HyperLink | AClick |
ImageButton | AClick |
ImageMap | AClick |
LinkButton | AClick |
ListBox | ASelectedIndexChanged |
Menu | AMenuItemClick |
RadioButton | ACheckedChanged |
RadioButtonList | ASelectedIndexChanged |
示例
這個例子包括一個帶有標籤控件和按鈕控件的簡單頁面。 當Page_Load
,Page_Init
,Page_PreRender
等頁面事件發生時,它會發送一個消息,由標籤控件顯示。當按鈕被點擊時,引發Button_Click
事件,並且還發送要在標籤上顯示的消息。
創建一個新的網站專案:EventHandling,點擊檔->新建->網站,然後選擇空網站, 如下 -
在解決方案資源管理器中,右擊專案的名稱,在彈出的菜單中,選擇添加->添加新專案,選擇Web窗體,並存為Default.aspx,如下圖所示 -
並從控制工具箱中拖動一個標籤控件和一個按鈕控件。參考下圖 -
使用屬性窗口,將標籤控件的ID設置為 lblmessage
,按鈕控件的ID設置為btnclick
。 將Button控件的Text
屬性設置為 - "事件按鈕"
。
標記檔(Default.aspx
):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Asp.net事件處理</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblmessage" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="btnclick" runat="server" Text="事件按鈕" OnClick="btnclick_Click" />
</div>
</form>
</body>
</html>
雙擊設計視圖移動到檔後面的代碼。 Page_Load
事件是自動創建的,沒有任何代碼。 編寫寫以下的代碼行用來處理相關事件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
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/>";
}
}
執行該頁面。標籤顯示頁面加載,頁面初始化和頁面預渲染事件。點擊按鈕看效果:
點擊事件按鈕,得到以下結果 -