HOW TO:在 ASP.NET Web 網頁中建立事件處理常式 (Visual Studio)

更新:2007 年 11 月

當您在 Visual Studio 中編輯 ASP.NET Web 網頁時,可以使用不同的方式為控制項和網頁建立伺服器事件處理常式。有些方式是根據正在使用的程式設計語言而定。您可以使用 Visual Web Developer 中的功能建立處理常式,或是以宣告或是程式碼的方法,建立這些處理常式。

注意事項:

您也可以為用戶端指令碼加入事件,在控制項以網頁中的項目在瀏覽器中執行時,便執行用戶端指令碼。如需詳細資訊,請參閱 HOW TO:將用戶端指令碼事件加入至 ASP.NET Web 伺服器控制項

如果控制項支援多個事件,通常會將一個事件設為預設。例如,就 Button 控制項而言,預設事件為 Click 事件。

在 Visual Web Developer 中建立事件處理常式

若要建立預設事件的事件處理常式

  • 在 [設計] 檢視中,按兩下頁面或按兩下您要建立預設事件處理常式的控制項。

    Visual Web Developer 會建立預設事件的處理常式,並開啟程式碼編輯器,將插入點放在該處理常式中。

若要在 [屬性] 視窗中建立事件處理常式

  1. 在 [設計] 檢視中,選取您要建立事件處理常式的控制項。

    注意事項:

    您無法在 [設計] 檢視中選取頁面,因此無法使用這個程序建立頁面層級的事件。請使用前一個程序代替。

  2. 在 [屬性] 中,請按一下事件符號

    [屬性] 視窗中會顯示所選取控制項的事件清單。

  3. 在事件名稱旁的方塊中,請執行下列其中一項動作:

    • 按兩下方塊,為該事件建立新的事件處理常式。設計工具會以慣例 controlID_event 命名處理常式。

    • 輸入要建立的處理常式名稱。

    • 在下拉式清單中,選取現有處理常式的名稱。

      下拉式清單中會顯示方法的清單,這些方法具有正確的事件簽章。

    完成時,Visual Web Developer 會切換至程式碼編輯器,並將插入點放在該處理常式中。

若要在程式碼編輯器中建立事件處理常式

  1. 使用下列其中一項技巧,切換至程式碼編輯器:

    • 若是單一檔案網頁,請切換至原始碼檢視。

    • 若是程式碼後置 (Code-Behind) 網頁,請在 [方案總管] 中以滑鼠右鍵按一下網頁的名稱,然後按一下 [檢視程式碼]。

      注意事項:

      在使用 C# 的程式碼後置網頁中,由於控制項名稱不會出現在前一個步驟的下拉式清單中,因此這個技巧將無法運作。請使用其中一個其他程序代替。

  2. 在程式碼編輯器視窗的頂端,從左邊的下拉式清單中選取控制項,然後從右邊的下拉式清單中選取事件。

    注意事項:

    已存在方法的事件會以粗體文字顯示。

以宣告方式建立事件處理常式

使用 Visual Web Developer 建立處理常式時,Visual Web Developer 會建立基本架構處理常式,並設定呼叫處理常式的控制項。您也可以不使用 Visual Web Developer,並自行設定達到相同的結果。

若要建立網頁事件的處理常式

  • 在程式碼編輯器中,建立一個名為 Page_event 的方法。

    例如,若要建立網頁 Load 事件的處理常式,請建立名為 Page_Load 的方法。

    注意事項:

    網頁事件處理常式不需要採用參數,這是其他控制項事件處理常式使用的方法。

    ASP.NET 網頁會自動將網頁事件繫結至名為 Page_event 的方法。這個自動繫結是由 @ Page 指示詞中的 AutoEventWireup 屬性所設定,並且預設會設為 true。如果將 AutoEventWireup 設為 false,網頁則不會自動搜尋使用 Page_event 命名慣例的方法。

    下列程式碼範例示範網頁 Load 事件的處理常式。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack Then
            Response.Write("<br>Page has been posted back.")
        End If
    End Sub
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            Response.Write("<br>Page has been posted back.");
        }
    }
    

若要以宣告方式加入控制項的處理常式

  1. 在程式碼編輯器中,以適當的簽章建立事件處理方法。

    您可以任意命名方法。

  2. 在控制項標記中,使用命名為 On<event name> 的屬性連結事件處理常式。將事件處理常式方法名稱當做值使用。

    下列程式碼範例示範了 TextBox 控制項的標記,這個控制項的 TextChanged 事件會繫結至名為 NameChange 的事件處理常式方法:

    安全性注意事項:

    這個範例包含一個可接受使用者輸入的文字方塊,這可能會造成安全性威脅。根據預設,ASP.NET Web 網頁會驗證使用者輸入未包含指令碼或 HTML 項目。如需詳細資訊,請參閱指令碼攻擊概觀

    Protected Sub NameChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles textbox1.TextChanged
        'Sub for the OnTextChanged event
    End Sub
    
    <asp:TextBox ID="textbox1" Runat="server" 
    Text="" 
    OnTextChanged="NameChange" />
    
  3. 將事件方法加入至程式碼。例如,下列程式碼範例示範了名為 NameChange 之事件處理常式方法的程式碼:

    protected void NameChange(object sender, EventArgs e)
    {
        //Method for the OnTextChanged event.
    }
    

若要在 Visual Basic 中,隱含地加入事件處理常式

  1. 在程式碼編輯器中,以適當的簽章建立事件處理方法。

    您可以任意命名方法。

  2. 使用 Handles 關鍵字,指定方法應該繫結的目標控制項和事件。

    在下列程式碼範例中,示範了 SampleButton 按鈕之 Click 事件的事件處理常式。範例中的方法命名為 Clicked。

    Protected Sub SampleButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles SampleButton.Click
        ' Code goes here.
    End Sub
    
    注意事項:

    如果使用了 Handles 關鍵字,請勿在控制項標記中包含事件屬性。如果包含了事件屬性,該處理常式將會呼叫兩次。

  3. 如果方法可以處理多個事件,請將其他事件的名稱加入至 Handles 子句,並以逗號隔開。

    在下列程式碼範例中,示範了處理多個按鈕之 Click 事件的方法。在處理常式中,程式碼會測試 sender 引數,以判斷所點選的按鈕。

    Protected Sub AnyClicked(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Button1.Click, Button2.Click, Button3.Click
        Dim b As Button = CType(sender, Button)
        Response.Write("You clicked the button labeled " & b.ID)
    End Sub
    

請參閱

工作

HOW TO:在執行階段時動態繫結 ASP.NET Web 網頁中的事件處理常式

概念

ASP.NET Web 伺服器控制項概觀

其他資源

處理和引發事件

ASP.NET Web 網頁中的伺服器事件處理