事件是一個動作或事件,如鼠標(biāo)點擊,按鍵,鼠標(biāo)移動或任何系統(tǒng)生成的通知。 一個過程通過事件進行通信溝通。例如,中斷是系統(tǒng)生成的事件。當(dāng)事件發(fā)生時,應(yīng)用程序應(yīng)該能夠響應(yīng)并管理它。
ASP.NET中的事件在客戶機上引發(fā)的,并在服務(wù)器機器上處理。 例如,用戶點擊瀏覽器中顯示的按鈕。則點擊(Click)事件就會被被引發(fā)。瀏覽器通過將其發(fā)布到服務(wù)器,并由服務(wù)器來處理這個客戶端事件。
服務(wù)器有一個子程序描述事件發(fā)生時該怎么做(處理); 它被稱為事件處理程序。 因此,當(dāng)事件消息被發(fā)送到服務(wù)器時,它檢查點擊(Click)事件是否具有關(guān)聯(lián)的事件處理程序。 如果有,則執(zhí)行事件處理程序。
ASP.NET事件處理程序通常需要兩個參數(shù)并返回void。 第一個參數(shù)表示引發(fā)事件的對象,第二個參數(shù)表示事件參數(shù)。
事件的一般語法是:
private void EventName (object sender, EventArgs e);
ASP.Net中最重要的應(yīng)用程序事件是:
同樣,最常用的Session事件是:
常見的頁面和控制事件是:
所有的ASP.NET控件都是以類的形式實現(xiàn)的,而且當(dāng)用戶對它們執(zhí)行特定的操作時,會觸發(fā)事件。 例如,當(dāng)用戶點擊一個按鈕時,“Click”事件就會生成(觸發(fā))。要處理事件,可使用內(nèi)置的屬性和事件處理程序。 事件處理程序被編碼為響應(yīng)一個事件,并采取適當(dāng)?shù)膭幼鳌?/p>
默認(rèn)情況下,Visual Studio通過在Sub過程中包含Handles子句來創(chuàng)建事件處理程序。 該子句命名該過程處理的控件和事件。
按鈕控件的ASP標(biāo)簽,如下:
<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子句編碼。 然后,必須根據(jù)控件的相應(yīng)事件屬性來命名處理程序。
按鈕控件的ASP標(biāo)簽:
<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 |
下拉列表,列表框,單選按鈕列表,復(fù)選框列表。 |
CheckedChanged |
OnCheckedChanged |
復(fù)選框,單選按鈕 |
有些事件會導(dǎo)致表單被立即回發(fā)到服務(wù)器,這些被稱為回發(fā)事件。 例如,點擊事件,如Button.Click。
某些事件不會立即回發(fā)到服務(wù)器,這些事件被稱為非回發(fā)事件。
例如,更改事件或選擇事件,如TextBox.TextChanged或CheckBox.CheckedChanged。 通過將其AutoPostBack屬性設(shè)置為true,可以使nonpostback事件立即回發(fā)。
Page對象的默認(rèn)事件是Load事件。 同樣,每個控件都有一個默認(rèn)事件。 例如,按鈕控件的默認(rèn)事件是Click事件。
只需在設(shè)計視圖中雙擊控件,即可在Visual Studio中創(chuàng)建默認(rèn)事件處理程序。 下表顯示了一些常用控件的默認(rèn)事件:
| 控件 | 默認(rèn)事件 |
|---|---|
| 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 |
這個例子包括一個帶有標(biāo)簽控件和按鈕控件的簡單頁面。 當(dāng)Page_Load,Page_Init,Page_PreRender等頁面事件發(fā)生時,它會發(fā)送一個消息,由標(biāo)簽控件顯示。當(dāng)按鈕被點擊時,引發(fā)Button_Click事件,并且還發(fā)送要在標(biāo)簽上顯示的消息。
創(chuàng)建一個新的網(wǎng)站項目:EventHandling,點擊文件->新建->網(wǎng)站,然后選擇空網(wǎng)站, 如下 -

在解決方案資源管理器中,右擊項目的名稱,在彈出的菜單中,選擇添加->添加新項目,選擇Web窗體,并存為Default.aspx,如下圖所示 -

并從控制工具箱中拖動一個標(biāo)簽控件和一個按鈕控件。參考下圖 -

使用屬性窗口,將標(biāo)簽控件的ID設(shè)置為 lblmessage ,按鈕控件的ID設(shè)置為btnclick。 將Button控件的Text屬性設(shè)置為 - "事件按鈕"。
標(biāo)記文件(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>
雙擊設(shè)計視圖移動到文件后面的代碼。 Page_Load事件是自動創(chuàng)建的,沒有任何代碼。 編寫寫以下的代碼行用來處理相關(guān)事件:
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/>";
}
}
執(zhí)行該頁面。標(biāo)簽顯示頁面加載,頁面初始化和頁面預(yù)渲染事件。點擊按鈕看效果:

點擊事件按鈕,得到以下結(jié)果 -
