如何:在 ASP.NET 网页中创建事件处理程序 (Visual Studio)

更新:2007 年 11 月

在 Visual Studio 中编辑 ASP.NET 网页时,您可以通过多种方法创建控件和页的服务器事件处理程序。其中某些方法取决于您正在使用的编程语言。您可以使用 Visual Web Developer 中的工具,也可以采用声明或代码方式创建处理程序。

6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

还可以为客户端脚本添加事件,这些事件在控件运行于浏览器中时作为页面中的元素执行。有关详细信息,请参见 如何:向 ASP.NET Web 服务器控件添加客户端脚本事件

如果控件支持多个事件,通常将其中的一个事件配置为默认事件。例如,对于 Button 控件,默认事件是 Click 事件。

在 Visual Web Developer 中创建事件处理程序

为默认事件创建事件处理程序

  • 在“设计”视图中,双击要为其创建默认事件处理程序的页面或控件。

    Visual Web Developer 创建默认事件的处理程序,并打开代码编辑器,此时插入点位于事件处理程序中。

在“属性”窗口中创建事件处理程序

  1. 在“设计”视图中,选择要创建其事件处理程序的控件。

    6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

    在“设计”视图中无法选择页面,因此无法使用此过程创建页面事件。请改用前面的过程。

  2. 在**“属性”**中,单击事件符号 事件按钮

    **“属性”**窗口显示所选控件的事件列表。

  3. 在事件名称旁边的框中,执行下列操作之一:

    • 双击以便为该事件新建事件处理程序。设计器将使用“控件 ID_事件”约定为该处理程序命名。

    • 键入要创建的处理程序的名称。

    • 在下拉列表中,选择现有处理程序的名称。

      下拉列表显示一个方法列表,这些方法都具有该事件的正确签名。

    完成后,Visual Web Developer 切换到代码编辑器,并将插入点置于处理程序中。

在代码编辑器中创建事件处理程序

  1. 使用以下方法之一切换到代码编辑器:

    • 对于只有一个文件的网页,请切换到“源”视图。

    • 对于代码隐藏的页,请在解决方案资源管理器中右击该页的名称,然后单击**“查看代码”**。

      6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

      对于使用 C# 的代码隐藏页,此方法不起作用,因为最后一步出现的下拉列表中没有该控件的名称。请改用其他过程。

  2. 在代码编辑器窗口的顶部,从左侧的下拉列表中选择控件,然后从右侧的下拉列表中选择事件。

    6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

    其对应方法已存在的事件将以粗体显示。

以声明方式创建事件处理程序

如果您使用 Visual Web Developer 创建处理程序,则 Visual Web Developer 创建主干处理程序,并配置控件来调用该处理程序。您可以不使用 Visual Web Developer,自己亲自执行这一操作。

为页面事件创建处理程序

  • 在代码编辑器中,创建一个名称为“Page_事件”的方法。

    例如,若要为页的 Load 事件创建处理程序,请创建一个名为 Page_Load 的方法。

    6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

    并不要求页面事件处理程序像其他控件事件处理程序那样接受参数。

    ASP.NET 页自动将页面事件绑定到名为 Page_事件的方法。此自动绑定操作是由 @ Page 指令中的 AutoEventWireup 属性配置的,该属性默认情况下设置为 true。如果将 AutoEventWireup 设置为 false,则该页不会自动搜索使用“Page_事件”命名约定的方法。

    下面的代码示例显示页面的 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<事件名称>”的属性与事件处理程序挂钩。将事件处理程序方法名作为值。

    下面的代码示例显示 TextBox 控件的标记,该控件的 TextChanged 事件已绑定到名为 NameChange 的事件处理程序方法:

    6w2tb12s.alert_security(zh-cn,VS.90).gif安全说明:

    该示例包含一个用于接受用户输入的文本框,这是一个潜在的安全威胁。默认情况下,ASP.NET 网页验证用户输入是否不包括脚本或 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
    
    6w2tb12s.alert_note(zh-cn,VS.90).gif说明:

    如果使用 Handles 关键字,请不要在控件标记中包含事件属性;否则处理程序将被调用两次。

  3. 如果该方法需要处理多个事件,请在 Handles 子句中添加其他事件的名称,名称之间以逗号分隔。

    下面的代码示例显示的方法用于处理多个按钮的 Click 事件。在该处理程序中,代码对发送方参数进行测试,以确定单击了哪个按钮。

    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
    

请参见

任务

如何:在 ASP.NET 网页中对事件处理程序进行运行时动态绑定

概念

ASP.NET Web 服务器控件概述

其他资源

处理和引发事件

ASP.NET 网页中的服务器事件处理