鍍金池/ 教程/ C#/ 事件處理
調(diào)試
管理狀態(tài)
Panel 控件
Web 服務(wù)
語言集成查詢
數(shù)據(jù)源
基礎(chǔ)控件
廣告輪轉(zhuǎn)器
服務(wù)器端
服務(wù)器控件
ADO.NET
多線程
HTML 服務(wù)器
生命周期
Ajax 控制
客戶端
異常處理
環(huán)境設(shè)置
部署
個性化
驗證器
多視圖
日歷
文件上傳
ASP.NET - 數(shù)據(jù)綁定
數(shù)據(jù)庫存取
實例
自定義控件
簡介
配置
數(shù)據(jù)緩存
安全性
指令
事件處理

事件處理

事件是一個動作或發(fā)生的事,如鼠標(biāo)單擊、按鍵、鼠標(biāo)移動,或任何系統(tǒng)生成的通知。一個進(jìn)程通過事件進(jìn)行溝通。例如,中斷是系統(tǒng)生成的事件。當(dāng)事件發(fā)生,應(yīng)用程序也能夠回應(yīng)和管理。

ASP.NET 上的事件在用戶機(jī)器上引發(fā),在服務(wù)器上處理。例如,一個用戶點擊了在瀏覽器中顯示的一個按鈕。一個點擊事件被引發(fā)。瀏覽器通過把它發(fā)送給服務(wù)器從而處理這個客戶端事件。

服務(wù)器有一個子程序來描述當(dāng)事件被引發(fā)時該做什么;這個被稱為事件處理程序。因此,當(dāng)事件信息被傳遞給服務(wù)器,它會檢查點擊事件是否與事件處理程序有關(guān)聯(lián)。如果有關(guān)聯(lián)的話,事件處理程序就會被執(zhí)行。

事件參數(shù)

ASP.NET 事件處理程序一般采用兩個參數(shù)并返回空。第一個參數(shù)代表了對象激發(fā)事件,第二個參數(shù)是事件參數(shù)。

一個事件的一般句法是:

private void EventName (object sender, EventArgs e);

應(yīng)用程序和會話事件

最重要的應(yīng)用程序事件是:

  • Application_Start - 當(dāng)開啟應(yīng)用程序或者網(wǎng)頁時被引發(fā)。
  • Application_End - 當(dāng)停止應(yīng)用程序或者網(wǎng)頁時被引發(fā)。

同樣的,最常使用的會話事件是:

  • Session_Start – 當(dāng)用戶最開始從應(yīng)用程序上請求一個頁面被引發(fā)。
  • Session_End – 當(dāng)會話結(jié)束后被引發(fā)。

頁面和控件事件

常見的頁面和控件事件有:

  • DataBinding – 當(dāng)一個控件綁定到一個數(shù)據(jù)源時被引發(fā)。
  • Disposed – 當(dāng)釋放頁面或者控件時被引發(fā)。
  • Error – 它是一個頁面事件,當(dāng)有未處理的異常時發(fā)生。
  • Init – 當(dāng)初始化頁面或者控件時被引發(fā)。
  • Load – 當(dāng)加載頁面或者控件時被引發(fā)。
  • PreRender – 當(dāng)顯示頁面或者控件時被引發(fā)。
  • Unload – 當(dāng)從內(nèi)存中卸載頁面或者控件時被引發(fā)。

使用控件處理事件

所有的 ASP.NET 控件作為類而實現(xiàn),并且當(dāng)用戶對其執(zhí)行一個特定的動作時,它們會引發(fā)事件。比如說,當(dāng)一個用戶點擊了一個按鈕,那就生成了 'Click' 事件。對于處理事件來說,有內(nèi)置屬性和事件處理程序。事件處理應(yīng)用程序被編碼作為一個事件的回應(yīng),并且對其采取適當(dāng)?shù)男袆印?/p>

默認(rèn)情況下,Visual Studio 創(chuàng)建一個事件處理程序,包括處理條款的子程序。這個子句命名程序處理的控件和事件。

button 控件的 ASP 標(biāo)簽:

<asp:Button ID="btnCancel" runat="server" Text="Cancel" />

Click 事件的事件處理應(yīng)用程序:

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) 

   Handles btnCancel.Click

End Sub

一個事件同樣可以在沒有 Handles 子句的前提下被編碼。然后,處理程序必須根據(jù)適合控件屬性的適當(dāng)事件進(jìn)行命名。

button 控件的 ASP 標(biāo)簽:

<asp:Button ID="btnCancel" runat="server" Text="Cancel" Onclick="btnCancel_Click" />

Click 事件的事件處理應(yīng)用程序:

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

常見的控件事件有:

事件 屬性 控件
Click OnClick 按鈕,圖像按鈕,鏈接按鈕,圖像導(dǎo)位圖
Command OnCommand 按鈕,圖像按鈕,鏈接按鈕
TextChanged OnTextChanged 文本框
SelectedIndexChanged OnSelectedIndexChanged 下拉菜單,列表框,單選按鈕列表,帶復(fù)選框的列表框
CheckedChanged OnCheckedChanged 復(fù)選框,單選按鈕

一些事件導(dǎo)致表單立即發(fā)回到服務(wù)器,這些被稱為回調(diào)事件。例如,單擊事件像 Button.Click。

一些事件則不會被立即發(fā)回到服務(wù)器,這些被稱為非回調(diào)事件。

例如,改變事件或者選擇事件,像 TextBox.TextChanged 或者 CheckBox.CheckedChanged。這些非回調(diào)事件可以通過設(shè)置它們的 AutoPostBack 屬性為 true 便可立即使它們回調(diào)。

默認(rèn)事件

頁面對象的默認(rèn)事件是加載事件。相似地,每一個控件都有一個默認(rèn)的事件。比如,按鈕控件的默認(rèn)事件就是 Click 事件。

默認(rèn)事件處理程序可以在 Visual Studio 中創(chuàng)建,僅通過雙擊設(shè)計視圖中的控件。以下表格展示了一寫常見控件的默認(rèn)事件:

控件 默認(rèn)事件
廣告控件(AdRotator) AdCreated
項目列表(BulletedList) Click
按鈕(Button) Click
日歷控件(Calender) SelectionChanged
復(fù)選框(CheckBox) CheckedChanged
復(fù)選列表(CheckBoxList) SelectedIndexChanged
數(shù)據(jù)表格(DataGrid) SelectedIndexChanged
數(shù)據(jù)列表(DataList) SelectedIndexChanged
下拉列表(DropDownList) SelectedIndexChanged
超鏈接(HyperLink) Click
圖像按鈕(ImageButton) Click
熱點(ImageMap) Click
超鏈接按鈕(LinkButton) Click
單選或多選的下拉列表(ListBox ) SelectedIndexChanged
菜單(Menu) MenuItemClick
單選按鈕(RadioButton) CheckedChanged
單選按鈕組(RadioButtonList) SelectedIndexChanged

示例

這個例子包括一個簡單頁面,上面有控件標(biāo)簽和一個按鈕控件。當(dāng)頁面事件,例如 Page_Load,Page_Init,Page_PreRender 等等事件發(fā)生的時候,它就會發(fā)送一條信息,會由標(biāo)簽控件顯示。當(dāng)點擊一個按鈕,Button_Click 事件被引發(fā),同樣發(fā)送一條由標(biāo)簽展示的信息。

創(chuàng)建一個新的網(wǎng)站,從控件工具框中拖拽一個標(biāo)簽控件和按鈕控件。使用窗口屬性,相應(yīng)地設(shè)置控件的 ID 為 .lblmessage. and .btnclick。設(shè)置按鈕控件的文本屬性為“Click”。

標(biāo)記文件(.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>

雙擊設(shè)計視圖并移動至文件后的代碼。Page_Load 事件是自動創(chuàng)建的,其中沒有任何的代碼。寫下以下的自我解釋的代碼行:

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/>";
      }
   }
}

執(zhí)行頁面。標(biāo)簽顯示頁面加載,頁面初始化以及頁面預(yù)覽事件。點擊按鈕查看效果:

http://wiki.jikexueyuan.com/project/asp-net/images/asp.net_event_example.jpg" alt="image" />

上一篇:管理狀態(tài)下一篇:服務(wù)器端