首先大家看到无论在1.1还是2.0中,用VS创建的网站每个aspx文件都对应一个cs文件(或者vb等其它语言).而cs文件里的类一般和文件同名, 如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default.创建的这个cs文件继承自System.Web.UI.Page类,而且只能\必须继承该类.原因就是aspx文件是继承cs文件的.
就拿Default.aspx,Default.aspx.cs文件来说.Default.aspx.cs里包含了类 _Default,继承字System.Web.UI.Page
通过
- publicclass_Default:System.Web.UI.Page
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此处放置用户代码以初始化页面
- }
- }
- }
就能看得出来.
而ASP.NET Default.aspx文件,虽然没有阐明用的哪个类,但是,实际上已经继承自_Default类.
- <%@Pagelanguage="c#"Codebehind="Default.aspx.cs"AutoEventWireup=
"false"Inherits="MyTest._Default"%>- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
- <HTML>
- <HEAD>
- <title>Default</title>
- <metanamemetaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
- <metanamemetaname="CODE_LANGUAGE"Content="C#">
- <metanamemetaname="vs_defaultClientScript"content="JavaScript">
- <metanamemetaname="vs_targetSchema"content=
"http://schemas.microsoft.com/intellisense/ie5">- </HEAD>
- <bodyMS_POSITIONINGbodyMS_POSITIONING="GridLayout">
- <formidformid="Form1"method="post"runat="server">
- <FONTfaceFONTface="宋体"></FONT>
- </form>
- </body>
- </HTML>
以上代码***句话***Inherits="MyTest._Default"就表明了这点.这个文件我是以VS2003建立的,也就是 ASP.NET1.1,MyTest是我用的命名空间。
类的运行机制
说了这么多,实际上我们还是没有说到System.Web.HttpContext类。但是我们现在说的东西对于System.Web.HttpContext类运用很有帮助。
我们访问了Default.aspx,那么是只访问ASP.NET Default.aspx文件,或者该类么?答案当然不是。ASP.NET中当子类被请求时,会先实例化父类。先建立父类的字段,然后是构造函数。
- publicclass_Default:System.Web.UI.Page
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此处放置用户代码以初始化页面
- }
- Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码
- overrideprotectedvoidOnInit(EventArgse)
- {
- //
- //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /**////<summary>
- ///设计器支持所需的方法-不要使用代码编辑器修改
- ///此方法的内容。
- ///</summary>
- privatevoidInitializeComponent()
- {
- this.Load+=newSystem.EventHandler(this.Page_Load);
- }
- #endregion
- }
从上面的类中可以看出,该类没有字段,也没有构造函数。实例化它又得先实例化System.Web.UI.Page类。 System.Web.UI.Page类不是本文要讨论的。在实例化_Default类的时候首先执行的是OnInit方法。它重写了 System.Web.UI.Page.OnInit。然后调用InitializeComponent方法,而InitializeComponent 方法又调用了Load事件,执行了Page_Load方法。
在Page_Load方法被执行之前,System.Web.UI.Page类的很多对象是不能使用的,比如:Application,Session等。
System.Web.HttpContext类Current属性的运用
终于说到本文的重点了,可能这部分也不会说很多,但是上面说的确实是为这里服务的。也不多说了,太长的文章一般没人看,何况我写的比较肤浅,并且不够精彩。
Application可以这样使用:
- usingSystem;
- usingSystem.Web;
- namespaceMyTest
- {
- /**////<summary>
- ///MyTest的摘要说明。
- ///</summary>
- publicclassMPage:System.Web.UI.Page
- {
- publicMPage()
- {
- //
- //TODO:在此处添加构造函数逻辑
- //
- try
- {
- if(HttpContext.Current.Application.Count<1)
- HttpContext.Current.Application.Add("Title","我的网站");
- //在Application没有被创建的时候执行
- }
- catch
- {
- HttpContext.Current.Response.Redirect("Err.Htm",true);
- //出现错误,跳转到错误页面
- }
- }
- publicstringMy_Title
- {
- get
- {
- returnApplication["Title"].ToString();
- }
- }
- }
- }
Default.aspx.cs继承
- usingSystem;
- usingSystem.Collections;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Drawing;
- usingSystem.Web;
- usingSystem.Web.SessionState;
- usingSystem.Web.UI;
- usingSystem.Web.UI.WebControls;
- usingSystem.Web.UI.HtmlControls;
- namespaceMyTest
- {
- /**////<summary>
- ///_Default的摘要说明。
- ///</summary>
- publicclass_Default:MPage
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此处放置用户代码以初始化页面
- }
- Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码
- overrideprotectedvoidOnInit(EventArgse)
- {
- //
- //CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /**////<summary>
- ///设计器支持所需的方法-不要使用代码编辑器修改
- ///此方法的内容。
- ///</summary>
- privatevoidInitializeComponent()
- {
- this.Load+=newSystem.EventHandler(this.Page_Load);
- }
- #endregion
- }
- }
ASP.NET Default.aspx文件使用
- <%@Pagelanguage="c#"Codebehind="Default.aspx.cs"AutoEventWireup=
"false"Inherits="MyTest._Default"%>- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
- <HTML>
- <HEAD>
- <title><%=My_Title%></title>
- <metanamemetaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
- <metanamemetaname="CODE_LANGUAGE"Content="C#">
- <metanamemetaname="vs_defaultClientScript"content="JavaScript">
- <metanamemetaname="vs_targetSchema"content=
"http://schemas.microsoft.com/intellisense/ie5">- </HEAD>
- <bodyMS_POSITIONINGbodyMS_POSITIONING="GridLayout">
- <formidformid="Form1"method="post"runat="server">
- <FONTfaceFONTface="宋体"></FONT>
- </form>
- </body>
- </HTML>
【编辑推荐】