验证一个ASP.NET应用程序和页面的生命周期的实现代码

 更新时间:2012年04月23日 20:38:31   作者:  
我们知道ASP.NET Page的生命周期实际上是ASP.NET Application的生命周期的一部分。这个周期经历了HTTP Module => HTTP Handler => ASP.NET Page => Http Module这样一个过程
如果我们能更好地掌握这样一个过程,那么对单个ASP.NET Page的生命周期也能更好地了解:
下面介绍如何编写一个简单的ASP.NET 页面和一个简单的HttpModule,对MSDN里提到的ASP.NET的生命周期进行验证
1. 首先使用Visual Studio 2010建立一个空的ASP.NET网站 (ASP.NET 4.0)
2. 添加一个Default.aspx,添加三个ASP.NET控件,分别为TextBox,Button和Validator:
复制代码 代码如下:
  
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:Button ID="btnSubmit" runat="server" Text="OK" onclick="btnSubmit_Click" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Please input your name!" ControlToValidate="txtName" ForeColor="#FF3300">
</asp:RequiredFieldValidator>
</div>
</form>

3. 添加一个ASP.NEt的App_code文件夹,新建一个类,内容为:
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class TestClass : IHttpModule
{
HttpApplication httpApp;
public static List<string> EventList = new List<string>();
public TestClass()
{
}
public void Dispose()
{ }
public void Init(HttpApplication context)
{
this.httpApp = context;
//EventList.Clear();
EventList.Add("Initiated");
context.BeginRequest += new EventHandler(context_BeginRequest);
context.AuthenticateRequest += new EventHandler(context_AuthenticateRequest);
context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
context.ResolveRequestCache += new EventHandler(context_ResolveRequestCache);
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
context.PostReleaseRequestState += new EventHandler(context_PostReleaseRequestState);
context.ReleaseRequestState += new EventHandler(context_ReleaseRequestState);
context.UpdateRequestCache += new EventHandler(context_UpdateRequestCache);
context.EndRequest += new EventHandler(context_EndRequest);
}
private void context_EndRequest(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: End Request <hr>");
foreach (string str in EventList)
{
httpApp.Response.Write(str + "<br>");
}
EventList.Clear();
}
void context_UpdateRequestCache(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Update Request Cache");
}
void context_ReleaseRequestState(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Release Request State");
}
void context_PostReleaseRequestState(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Post Release Request State");
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Pre Request Handler Execution");
}
void context_AcquireRequestState(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Acquire Request State");
}
void context_ResolveRequestCache(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Resolve Request");
}
void context_AuthorizeRequest(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Authorize Request");
}
void context_AuthenticateRequest(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: AuthenticateRequest");
}
void context_BeginRequest(object sender, EventArgs e)
{
EventList.Add("HTTP Modules: Begin Request");
}
}

4. 修改刚才的Default.aspx的后台cs代码:
复制代码 代码如下:

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_Init()
{
TestClass.EventList.Add("ASP.NET Page: Page_Init");
}
protected void Page_Load(object sender, EventArgs e)
{
TestClass.EventList.Add("ASP.NET Page: Page_Load");
}
public override void Validate()
{
TestClass.EventList.Add("ASP.NET Page: Validated");
base.Validate();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
TestClass.EventList.Add("ASP.NET Page: Event");
}
protected override void Render(HtmlTextWriter writer)
{
TestClass.EventList.Add("ASP.NET Page: Render");
base.Render(writer);
}
protected void Page_Unload(object sender, EventArgs e)
{
TestClass.EventList.Add("ASP.NET Page: Unload");
}
}

5. 修改web.config内容如下:
复制代码 代码如下:

<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.web>
<httpModules>
<add name="TestClass" type="TestClass"/>
</httpModules>
</system.web>
</configuration>

6. Ctrl+F5执行,在浏览器里可以看到:

7. 在文本框内输入内容,可得:

 
结论:
1. Module只初始化了一次,当页面postback的时候,module不会再初始化。
2. Validate和Event事件在页面第一次初始化的时候不会触发,但是由于页面本身存在validate控件和事件按钮,所以这两个事件在第二次会被触发。
本文参考了codeproject.com的如下一篇文章http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

相关文章

  • ASP.NET Core WebApi返回结果统一包装实践记录

    ASP.NET Core WebApi返回结果统一包装实践记录

    本文主要是展示了针对ASP.NET Core WeApi结果统一返回格式的相关操作,通过示例我们一步一步的展示了完成这一目标的不断升级的实现,虽然整体看起来比较简单,但是却承载着笔者一次又一次的思考升级
    2022-04-04
  • asp.net xml序列化与反序列化

    asp.net xml序列化与反序列化

    在.NET下有一种技术叫做对象序列化,它可以将对象序列化为二进制文件、XML文件、SOAP文件,这样, 使用经过序列化的流进行传输效率就得到了大大的提升。
    2008-08-08
  • ASP.NET MVC中将控制器分离到类库的实现

    ASP.NET MVC中将控制器分离到类库的实现

    这篇文章主要介绍了ASP.NET MVC中将控制器分离到类库的实现的相关资料,需要的朋友可以参考下
    2015-06-06
  • MVC、MVP和MVVM分别是什么_动力节点Java学院整理

    MVC、MVP和MVVM分别是什么_动力节点Java学院整理

    MVC,MVP 和 MVVM分别是什么?MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了。
    2017-08-08
  • asp.net生成静态后冗余代码,去掉viewstate生成的代码

    asp.net生成静态后冗余代码,去掉viewstate生成的代码

    asp.net生成的viewstate垃圾信息超过了20K,如果页面前二K不是内容会被引擎处罚,所以我们需要清理下asp.net生成静态后冗余代码
    2012-10-10
  • .Net集成敏感词组件的步骤

    .Net集成敏感词组件的步骤

    现如今大部分服务都会有用户输入,为了服务的正常运行,很多时候不得不针对输入进行敏感词的检测、替换。如果人工做这样的工作,不仅效率低,成本也高。水弟在这里写了一个让小编姐姐都觉得快的敏感词组件接入示例,不需要依赖第三方服务,只需两分钟即可享受清爽文字。
    2021-05-05
  • ASP.NET 控件开发系列之图片切换web控件

    ASP.NET 控件开发系列之图片切换web控件

    刚开始学习控件开发,写了一个web图片切换控件,欢迎大家拍砖.
    2010-04-04
  • HTTP 错误 500.19 - Internal Server Error解决办法详解

    HTTP 错误 500.19 - Internal Server Error解决办法详解

    这篇文章主要介绍了HTTP 错误 500.19 - Internal Server Error解决办法详解的相关资料,这里对错误进行了详细分析及说明该如何解决,需要的朋友可以参考下
    2016-11-11
  • 在 ASP.Net Core 中使用 MiniProfiler的方法

    在 ASP.Net Core 中使用 MiniProfiler的方法

    这篇文章主要介绍了在 ASP.Net Core 中使用 MiniProfiler的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Visual Studio 2017 15.5 正式发布!性能再提升

    Visual Studio 2017 15.5 正式发布!性能再提升

    Visual Studio 2017 15.5 正式发布!性能再提升,时发布的还有 Visual Studio for Mac 7.3,亮点如下
    2017-12-12

最新评论