驗(yàn)證一個(gè)ASP.NET應(yīng)用程序和頁面的生命周期的實(shí)現(xiàn)代碼
下面介紹如何編寫一個(gè)簡單的ASP.NET 頁面和一個(gè)簡單的HttpModule,對MSDN里提到的ASP.NET的生命周期進(jìn)行驗(yàn)證
1. 首先使用Visual Studio 2010建立一個(gè)空的ASP.NET網(wǎng)站 (ASP.NET 4.0)
2. 添加一個(gè)Default.aspx,添加三個(gè)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. 添加一個(gè)ASP.NEt的App_code文件夾,新建一個(gè)類,內(nèi)容為:
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內(nèi)容如下:
<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執(zhí)行,在瀏覽器里可以看到:
7. 在文本框內(nèi)輸入內(nèi)容,可得:

結(jié)論:
1. Module只初始化了一次,當(dāng)頁面postback的時(shí)候,module不會再初始化。
2. Validate和Event事件在頁面第一次初始化的時(shí)候不會觸發(fā),但是由于頁面本身存在validate控件和事件按鈕,所以這兩個(gè)事件在第二次會被觸發(fā)。
本文參考了codeproject.com的如下一篇文章http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx
相關(guān)文章
利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺dataTable數(shù)據(jù)列表
jQuery dataTables 插件是一個(gè)優(yōu)秀的表格插件,應(yīng)用非常廣泛,本文給大家介紹利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺dataTable數(shù)據(jù)列表,非常不錯,具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07
ajaxToolkit:ModalPopupExtender演示及實(shí)現(xiàn)代碼
ajaxToolkit:ModalPopupExtender可以讓用戶模擬新開一個(gè)窗口,就是在模擬新開窗口作多項(xiàng)選項(xiàng)的功能,感興趣的朋友可以了解下,希望此文對你有所幫助2013-01-01
.net core使用redis基于StackExchange.Redis
這篇文章主要為大家詳細(xì)介紹了.net core使用redis基于StackExchange.Redis的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
巧妙使用JQuery Clone 添加多行數(shù)據(jù),并更新到數(shù)據(jù)庫的實(shí)現(xiàn)代碼
巧妙使用JQuery Clone 添加多行數(shù)據(jù),并更新到數(shù)據(jù)庫的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-12-12
Math.NET?Numerics?開源數(shù)學(xué)庫安裝使用詳解
本文給大家分享Math.NETNumerics庫的安裝方法和使用示例,該庫是C#中進(jìn)行科學(xué)計(jì)算和數(shù)據(jù)分析的常用工具,本文介紹實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-03-03
asp.net錯誤捕獲(錯誤處理)page_error事件使用方法
Page_Error事件提供了一種捕獲頁面級錯誤的方法。對于錯誤的處理,您可以只是顯示錯誤信息(正如下面的示例代碼所示),也可以記錄事件或執(zhí)行某個(gè)其他操作2014-01-01
asp.net mvc signalr簡單聊天室制作過程分析
這篇文章主要為大家分析了asp.net mvc signalr簡單聊天室制作過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
ASP.NET與MySQL數(shù)據(jù)庫簡明圖示入門教程
ASP.NET與MySQL數(shù)據(jù)庫簡明圖示入門教程...2006-09-09

