ASP.NET 事件處理

2022-06-27 15:37 更新

事件處理

本節(jié)為你介紹 ASP.NET 事件處理。

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

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

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

事件參數(shù)

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

一個(gè)事件的一般句法是:

private void EventName (object sender, EventArgs e);

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

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

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

同樣的,最常使用的會(huì)話事件是:

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

頁面和控件事件

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

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

使用控件處理事件

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

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

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

一個(gè)事件同樣可以在沒有 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

常見的控件事件有:

事件屬性控件
ClickOnClick按鈕,圖像按鈕,鏈接按鈕,圖像導(dǎo)位圖
CommandOnCommand按鈕,圖像按鈕,鏈接按鈕
TextChangedOnTextChanged文本框
SelectedIndexChangedOnSelectedIndexChanged下拉菜單,列表框,單選按鈕列表,帶復(fù)選框的列表框
CheckedChangedOnCheckedChanged復(fù)選框,單選按鈕

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

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

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

默認(rèn)事件

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

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

控件默認(rèn)事件
廣告控件(AdRotator)AdCreated
項(xiàng)目列表(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
熱點(diǎn)(ImageMap)Click
超鏈接按鈕(LinkButton)Click
單選或多選的下拉列表(ListBox )SelectedIndexChanged
菜單(Menu)MenuItemClick
單選按鈕(RadioButton)CheckedChanged
單選按鈕組(RadioButtonList)SelectedIndexChanged

示例

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

創(chuàng)建一個(gè)新的網(wǎng)站,從控件工具框中拖拽一個(gè)標(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è)計(jì)視圖并移動(dòng)至文件后的代碼。Page_Load 事件是自動(dòng)創(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ù)覽事件。點(diǎn)擊按鈕查看效果:

image

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)