ASP.NET 응용 프로그램 과 페이지 의 수명 주기 구현 코드 를 검증 합 니 다.

만약 에 우리 가 이러한 과정 을 잘 파악 할 수 있다 면 하나의 ASP.NET Page 의 생명 주기 에 대해 서도 잘 알 수 있 습 니 다.간단 한 ASP.NET 페이지 와 간단 한 Http Module 을 만 드 는 방법 을 소개 합 니 다.MSDN 에서 언급 한 ASP.NET 의 생명주기 검증 1.먼저 Visual Studio 2010 을 사용 하여 빈 ASP.NET 사이트(ASP.NET 4.0)를 만 듭 니 다.2.Default.aspx 를 추가 하고 3 개의 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>
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.웹.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 이 벤트 는 페이지 가 처음 초기 화 될 때 실행 되 지 않 지만 페이지 자체 에 vaidate 컨트롤 과 이벤트 버튼 이 존재 하기 때문에 두 번 째 이벤트 가 실 행 됩 니 다.본 고 는 codeprocject.com 의 다음 글 을 참고 하 였 다http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

좋은 웹페이지 즐겨찾기