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服务端