ASP.NET事件處理

事件是一個動作或事件,如滑鼠點擊,按鍵,滑鼠移動或任何系統生成的通知。 一個過程通過事件進行通信溝通。例如,中斷是系統生成的事件。當事件發生時,應用程式應該能夠回應並管理它。

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

執行該頁面。標籤顯示頁面加載,頁面初始化和頁面預渲染事件。點擊按鈕看效果:

點擊事件按鈕,得到以下結果 -


上一篇: ASP.NET第一個程式 下一篇: ASP.NET服務端