事件是一个动作或事件,如鼠标点击,按键,鼠标移动或任何系统生成的通知。 一个过程通过事件进行通信沟通。例如,中断是系统生成的事件。当事件发生时,应用程序应该能够响应并管理它。
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.TextChanged
或CheckBox.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_Load
,Page_Init
,Page_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/>";
}
}
执行该页面。标签显示页面加载,页面初始化和页面预渲染事件。点击按钮看效果:
点击事件按钮,得到以下结果 -