C#和ASP.NET之事件

事件是一种用于类和类之间传递消息或触发新的行为的编程方式。通过提供事件的句柄,能够把控件和可执行的代码联系在一起,

如用户单击Button控件触发Click事件后就执行相应的事件处理代码。

事件的声明通过委托来实现。先定义委托,再用委托定义事件,触发事件的过程实质是调用委托。事件声明语法格式如下:

public delegate void EventHandler(object sender,EventArgs e);//定义委托

public event EventHandler MyEvent;//定义事件

EventHandler委托定义了两个参数,分别属于object类型和EventArgs类型。如果需要更多参数,可以通过派生EventArgs类实现。

sender表示触发事件的对象,e用于在事件中传递参数。例如,若用户单击Button按钮,则sender表示Button按钮,e表示Click时间参数。

MyEvent事件使用EventHandler委托定义,其中使用了public修饰符,也可以使用private,protected等修饰符。

实例:在AccountEvent类中增加账户金额不足事件并运用事件

AccountEvent类的定义:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5
 6
 7 public class AccountEvent
 8 {
 9     private string _ID;
10     private string _Name;
11     private decimal _Balance;
12     //定义Overdraw事件
13     public event EventHandler Overdraw;
14     public void OnOverDraw(object sender, EventArgs e)
15     {
16         if (Overdraw != null)
17         {
18             Overdraw(this,e);
19
20         }
21     }
22     //存款方法
23     public void Deposit(decimal amount)
24     {
25         //先检查存款的金额是否大于0
26         if (amount > 0)
27         {
28             _Balance += amount;
29         }
30         else
31         {
32             throw new Exception("存款的金额不能小于等于0!!");
33         }
34     }
35     //取款方法
36     //并在此方法中加入触发事件的代码
37     public void Acquire(decimal amount)
38     {
39         if (amount < _Balance)
40         {
41             _Balance -= amount;
42         }
43         else
44         {
45             OnOverDraw(this, EventArgs.Empty);
46             return;
47         }
48     }
49
50     public string ID
51     {
52         get { return _ID; }
53         set { _ID = value; }
54     }
55     public string Name
56     {
57         get { return _Name; }
58         set { _Name = value; }
59     }
60     public decimal Balance
61     {
62         get { return _Balance; }
63         set { _Balance = value; }
64     }
65     //构造方法
66     public AccountEvent(string id,string name,decimal balance)
67     {
68         _ID = id;
69         _Name = name;
70         _Balance = balance;
71
72     }
73
74
75 }

至此,已经声明了事件并增加了事件触发点。但若要在ASP.NET页面上使用事件,还需要使用运算符“+=”注册事件,并要编写事件处理代码。

下面是如何运用Overdraw事件。

AccountEventPage.aspx.cs的代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 public partial class Chap3_AccountEventPage : System.Web.UI.Page
 9 {
10     protected void Page_Load(object sender, EventArgs e)
11     {
12         AccountEvent accountEvent = new AccountEvent("03012", "李明", 200);//建立AccountEvent对象,账户初始金额为200
13         //注册Overdraw事件
14         accountEvent.Overdraw += new EventHandler(account_OverDraw);
15         accountEvent.Acquire(400);//取款400
16
17     }
18     //Overdraw事件处理代码
19     private void account_OverDraw(object sender, EventArgs e)
20     {
21         Response.Write("账户金额不足了!!!");
22     }
23 }

浏览AccountEventPage.aspx呈现界面如下:

程序说明:

当程序执行“account.Acquire(400);”时,因为对账户的取款金额大于账户金额,会执行Acquire方法中if语句的else部分,将触发事件Overdraw;再执行account_Overdraw()方法,输出信息“账户金额不足了!!!”。

此例子中事件运用的步骤为:

1.定义事件。

2.设置事件的触发点。

3.使用运算符“+=”注册事件。

4.编写事件处理代码。

其中1、2两步是在类的定义中完成的,3、4步是在aspx文件中完成的的。

时间: 2024-08-11 03:26:17

C#和ASP.NET之事件的相关文章

asp.net页面事件执行顺序

转自http://www.cnblogs.com/hnlyh/articles/4230388.html C#代码 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.

ASP.NET 管道事件与HttpModule, HttpHandler简单理解

BeginRequest 指示请求处理开始 AuthenticateRequest 封装请求身份验证过程 AuthorizeRequest 封装检查是否能利用以前缓存的输出页面处理请求的过程 ResolveRequestCache 从缓存中得到相应时候触发 AcquireRequestState 加载初始化Session时候触发 PreRequestHandlerExecute 在Http请求进入HttpHandler之前触发 PostRequestHandlerExecute 在Http请求进

ASP.NET相关事件及JS的执行顺序

实验代码: ASPX: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Ajax.WebForm1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head run

ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络

第一部分:转载自Artech  IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载).IIS 6引入了应用程序池的概念,一个工作进程对应着一个应用程序池.一个应用程序池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录.与IIS 5.x一样,每一个Web应用运行在各自的应用程序域中. 如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一

对于服务器控件asp:Button单击事件失效问题汇总

今天写了个弹出层内的导出,发现按钮的单击事件点击无效,于是查找了各种原因,尝试多种方法进行解决. 先来说下可能的原因吧. 1.按钮事件方法的名称是否准确无误 2.是否为客户端按钮,即含有 runat="sever"标签. 3.按钮是否存在在<form runat="server">标签内. 4.检查是否按钮存在在被嵌套的form标签内..net 不允许form被嵌套. 5.还有一些其他不知道的限制因素.以后再补充吧.. 上面前四种情况,从文字上就能知道解

ASP.NET-使用事件监视诊断程序异常

用windows自带的事件监视程序来监视网站的异常 来自为知笔记(Wiz)

ASP.NET jQuery 事件里调用后台方法

利用js 调用后台写的方法 1 <script src="js/jquery-1.7.1.min.js"></script> 2 2 <script> 3 3 $(function () { 4 4 $(".btn").click(function () { 5 5 $("#txtname").val('<%=Session["Name"]%>'); 6 6 $("#t

ASP.NET页面事件:顺序与回传详解

当页面被提交请求第一个方法永远是构造函数.您可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制.特别地,您需要使用HttpContext对象.当前可以使用的对象包括QueryString, Form以及Cookies集合,还有Cache对象.注意:在构造函数里是不允许使用Session的. 下一个将执行的方法是AddParsedSubObject方法,这个方法将添加所有独立的控件并把页面组成一个控件集合树,这个方法经常被一些高级的页面模板解决方案(

ASP.NET 生命周期及管道事件

Client(发送报文:请求行+请求头+空行+请求体) <------ Http 协议 ------> Server,由 Http.sys 监听 Http 请求 -> WAS+Metabase(通过URL确定WebApp工作进程) -> W3WP.exe(一个应用程序池,加载Aspnet_IsAPI.dll) ->AppDomainFactory(构造 ApplicationManager)->ISAPIApplicationHost+ISAPIRuntime(由App