事件是一個動作或事件,例如滑鼠單擊、按鍵、滑鼠移動或任何系統生成的通知。進程通過事件進行通信。例如,中斷是系統生成的事件。當事件發生時,應用程式應該能夠響應並管理它。
ASP.NET中的事件在客戶端計算機上引發,並在伺服器計算機上處理。例如,用戶單擊瀏覽器中顯示的按鈕。引發單擊事件。瀏覽器通過將此客戶端事件發布到伺服器來處理它。
伺服器有一個子例程,用於描述引發事件時要執行的操作;它稱爲事件處理程序。因此,當事件消息傳輸到伺服器時,它會檢查Click事件是否有關聯的事件處理程序。如果有,則執行事件處理程序。
Event Arguments
ASP.NET事件處理程序通常接受兩個參數並返回void。第一個參數表示引發事件的對象,第二個參數是事件參數。
事件的一般語法爲:
private void EventName (object sender, EventArgs e);
Application and Session Events
最重要的應用程式事件是:
應用程式啓動-當應用程式/網站啓動時會引發此問題。
應用程式結束-當應用程式/網站停止時會引發此問題。
類似地,最常用的會話事件是:
Session_Start-當用戶第一次從應用程式請求頁面時引發。
session=U end/b>-it is raised when the session ends.
Page and Control Events
常見的頁面和控制項事件包括:
數據綁定-當控制項綁定到數據源時引發。
已釋放-當釋放頁面或控制項時會引發此問題。
錯誤-這是一個頁事件,在引發未處理的異常時發生。
Init-在初始化頁或控制項時引發。
加載-在加載頁或控制項時引發。
PreRender-當要呈現頁面或控制項時,它會被引發。
卸載-從內存中卸載頁或控制項時會引發此問題。
Event Handling Using Controls
所有的ASP.NET控制項都是作爲類實現的,它們都有一些事件,當用戶對它們執行某個操作時,這些事件就會被觸發。例如,當用戶單擊按鈕時,將生成「Click」事件。對於處理事件,有內置屬性和事件處理程序。對事件處理程序進行編碼以響應事件,並對其採取適當的操作。
默認情況下,Visual Studio通過在子過程中包含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 | 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。通過將非post back事件的AutoPostBack屬性設置爲true,可以使其立即回發。
Default Events
頁面對象的默認事件是加載事件。類似地,每個控制項都有一個默認事件。例如,button控制項的默認事件是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
這個例子包括一個簡單的頁面,上面有一個標籤控制項和一個按鈕控制項。當頁面事件(如頁面加載、頁面初始化、頁面預呈現等)發生時,它會發送一條消息,由label控制項顯示。單擊按鈕時,將引發按鈕單擊事件,該事件還會發送一條要顯示在標籤上的消息。
創建一個新網站,並從「控制項」工具箱中拖動標籤控制項和按鈕控制項。使用「屬性」窗口,將控制項的ID設置爲.lblmessage。還有,btnclick。分別是。將按鈕控制項的文本屬性設置爲「單擊」。
標記文件(.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>
雙擊「設計」視圖以移動到代碼隱藏文件。頁面加載事件是自動創建的,其中沒有任何代碼。寫下以下代碼行:
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/>"; } } }
執行頁面。標籤顯示頁面加載、頁面初始化和頁面預呈現事件。單擊按鈕查看效果: