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 會建立預設事件的處理常式,並開啟程式碼編輯器,將插入點放在該處理常式中。
若要在 [屬性] 視窗中建立事件處理常式
在 [設計] 檢視中,選取您要建立事件處理常式的控制項。
注意事項: 您無法在 [設計] 檢視中選取頁面,因此無法使用這個程序建立頁面層級的事件。請使用前一個程序代替。
在 [屬性] 中,請按一下事件符號 。
[屬性] 視窗中會顯示所選取控制項的事件清單。
在事件名稱旁的方塊中,請執行下列其中一項動作:
按兩下方塊,為該事件建立新的事件處理常式。設計工具會以慣例 controlID_event 命名處理常式。
輸入要建立的處理常式名稱。
在下拉式清單中,選取現有處理常式的名稱。
下拉式清單中會顯示方法的清單,這些方法具有正確的事件簽章。
完成時,Visual Web Developer 會切換至程式碼編輯器,並將插入點放在該處理常式中。
若要在程式碼編輯器中建立事件處理常式
使用下列其中一項技巧,切換至程式碼編輯器:
若是單一檔案網頁,請切換至原始碼檢視。
若是程式碼後置 (Code-Behind) 網頁,請在 [方案總管] 中以滑鼠右鍵按一下網頁的名稱,然後按一下 [檢視程式碼]。
注意事項: 在使用 C# 的程式碼後置網頁中,由於控制項名稱不會出現在前一個步驟的下拉式清單中,因此這個技巧將無法運作。請使用其中一個其他程序代替。
在程式碼編輯器視窗的頂端,從左邊的下拉式清單中選取控制項,然後從右邊的下拉式清單中選取事件。
注意事項: 已存在方法的事件會以粗體文字顯示。
以宣告方式建立事件處理常式
使用 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."); } }
若要以宣告方式加入控制項的處理常式
在程式碼編輯器中,以適當的簽章建立事件處理方法。
您可以任意命名方法。
在控制項標記中,使用命名為 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" />
將事件方法加入至程式碼。例如,下列程式碼範例示範了名為 NameChange 之事件處理常式方法的程式碼:
protected void NameChange(object sender, EventArgs e) { //Method for the OnTextChanged event. }
若要在 Visual Basic 中,隱含地加入事件處理常式
在程式碼編輯器中,以適當的簽章建立事件處理方法。
您可以任意命名方法。
使用 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 關鍵字,請勿在控制項標記中包含事件屬性。如果包含了事件屬性,該處理常式將會呼叫兩次。
如果方法可以處理多個事件,請將其他事件的名稱加入至 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 網頁中的事件處理常式