编写代码软件,【Step by Step】编写代码验证一个ASP.NET应用程序和页面的生命周期

 2023-09-25 阅读 31 评论 0

摘要:我们知道ASP.NET Page的生命周期实际上是ASP.NET Application的生命周期的一部分。这个周期经历了HTTP Module => HTTP Handler =>ASP.NET Page => Http Module这样一个过程。如果我们能更好地掌握这样一个过程,那么对单个ASP.NET Page的生命周期

我们知道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控件,分别为TextBoxButtonValidator

  

<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编程入门与应用?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执行,在浏览器里可以看到:

  2011061412492379.png

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

  2011061412501729.png

结论:1. Module只初始化了一次,当页面postback的时候,module不会再初始化。

  2. Validate和Event事件在页面第一次初始化的时候不会触发,但是由于页面本身存在validate控件和事件按钮,所以这两个事件在第二次会被触发。

注:本文转载请注明来自博客园 http://www.cnblogs.com/charrli

本文参考了codeproject.com的如下一篇文章http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

转载于:https://www.cnblogs.com/charrli/archive/2011/06/14/2080499.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/95888.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息