ASP.NET Default.aspx文件
首先大家看到無(wú)論在1.1還是2.0中,用VS創(chuàng)建的網(wǎng)站每個(gè)aspx文件都對(duì)應(yīng)一個(gè)cs文件(或者vb等其它語(yǔ)言).而cs文件里的類一般和文件同名, 如果遇見關(guān)鍵字的情況才會(huì)自動(dòng)使類名前加個(gè)'_',例如:_Default.創(chuàng)建的這個(gè)cs文件繼承自System.Web.UI.Page類,而且只能\必須繼承該類.原因就是aspx文件是繼承cs文件的.
就拿Default.aspx,Default.aspx.cs文件來(lái)說(shuō).Default.aspx.cs里包含了類 _Default,繼承字System.Web.UI.Page
通過
- publicclass_Default:System.Web.UI.Page
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此處放置用戶代碼以初始化頁(yè)面
- }
- }
- }
就能看得出來(lái).
而ASP.NET Default.aspx文件,雖然沒有闡明用的哪個(gè)類,但是,實(shí)際上已經(jīng)繼承自_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"就表明了這點(diǎn).這個(gè)文件我是以VS2003建立的,也就是 ASP.NET1.1,MyTest是我用的命名空間。
類的運(yùn)行機(jī)制
說(shuō)了這么多,實(shí)際上我們還是沒有說(shuō)到System.Web.HttpContext類。但是我們現(xiàn)在說(shuō)的東西對(duì)于System.Web.HttpContext類運(yùn)用很有幫助。
我們?cè)L問了Default.aspx,那么是只訪問ASP.NET Default.aspx文件,或者該類么?答案當(dāng)然不是。ASP.NET中當(dāng)子類被請(qǐng)求時(shí),會(huì)先實(shí)例化父類。先建立父類的字段,然后是構(gòu)造函數(shù)。
- publicclass_Default:System.Web.UI.Page
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此處放置用戶代碼以初始化頁(yè)面
- }
- Web窗體設(shè)計(jì)器生成的代碼#regionWeb窗體設(shè)計(jì)器生成的代碼
- overrideprotectedvoidOnInit(EventArgse)
- {
- //
- //CODEGEN:該調(diào)用是ASP.NETWeb窗體設(shè)計(jì)器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /**////<summary>
- ///設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改
- ///此方法的內(nèi)容。
- ///</summary>
- privatevoidInitializeComponent()
- {
- this.Load+=newSystem.EventHandler(this.Page_Load);
- }
- #endregion
- }
從上面的類中可以看出,該類沒有字段,也沒有構(gòu)造函數(shù)。實(shí)例化它又得先實(shí)例化System.Web.UI.Page類。 System.Web.UI.Page類不是本文要討論的。在實(shí)例化_Default類的時(shí)候首先執(zhí)行的是OnInit方法。它重寫了 System.Web.UI.Page.OnInit。然后調(diào)用InitializeComponent方法,而InitializeComponent 方法又調(diào)用了Load事件,執(zhí)行了Page_Load方法。
在Page_Load方法被執(zhí)行之前,System.Web.UI.Page類的很多對(duì)象是不能使用的,比如:Application,Session等。
System.Web.HttpContext類Current屬性的運(yùn)用
終于說(shuō)到本文的重點(diǎn)了,可能這部分也不會(huì)說(shuō)很多,但是上面說(shuō)的確實(shí)是為這里服務(wù)的。也不多說(shuō)了,太長(zhǎng)的文章一般沒人看,何況我寫的比較膚淺,并且不夠精彩。
Application可以這樣使用:
- usingSystem;
- usingSystem.Web;
- namespaceMyTest
- {
- /**////<summary>
- ///MyTest的摘要說(shuō)明。
- ///</summary>
- publicclassMPage:System.Web.UI.Page
- {
- publicMPage()
- {
- //
- //TODO:在此處添加構(gòu)造函數(shù)邏輯
- //
- try
- {
- if(HttpContext.Current.Application.Count<1)
- HttpContext.Current.Application.Add("Title","我的網(wǎng)站");
- //在Application沒有被創(chuàng)建的時(shí)候執(zhí)行
- }
- catch
- {
- HttpContext.Current.Response.Redirect("Err.Htm",true);
- //出現(xiàn)錯(cuò)誤,跳轉(zhuǎn)到錯(cuò)誤頁(yè)面
- }
- }
- 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的摘要說(shuō)明。
- ///</summary>
- publicclass_Default:MPage
- {
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //在此處放置用戶代碼以初始化頁(yè)面
- }
- Web窗體設(shè)計(jì)器生成的代碼#regionWeb窗體設(shè)計(jì)器生成的代碼
- overrideprotectedvoidOnInit(EventArgse)
- {
- //
- //CODEGEN:該調(diào)用是ASP.NETWeb窗體設(shè)計(jì)器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /**////<summary>
- ///設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改
- ///此方法的內(nèi)容。
- ///</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>
【編輯推薦】