ASP.NET 頁類概述

在請求 ASP.NET 頁且該頁將標記呈現給瀏覽器的過程中,運行的不僅僅是爲該頁創建的代碼。相反,ASP.NET 在運行時會生成並編譯一個或多個類來實際執行運行該頁所需的任務。本主題概述了在運行時生成的代碼。

生成和運行頁類代碼

ASP.NET 頁作爲一個單元運行,它將該頁中的服務器端元素(如控件)與您編寫的事件處理代碼結合在一起。您無需將頁預編譯爲程序集。ASP.NET 將動態編譯頁,並在用戶第一次請求頁時運行該頁。如果對該頁所依賴的頁或資源進行了任何更改,則將自動對該頁進行重新編譯。編譯器將根據頁是使用單文件模型還是代碼隱藏模型來創建一個或多個類。

ASP.NET 還支持對網站進行預編譯以支持站點部署以及增強性能和執行錯誤檢查。有關更多信息,請參見 ASP.NET 網站預編譯概述。預編譯適用於單文件模型和代碼隱藏頁模型,並且兩種模型的編譯器輸出是相同的。

單文件頁

在單文件頁中,標記、服務器端元素以及事件處理代碼全都位於同一個 .aspx 文件中。在對該頁進行編譯時,編譯器將生成和編譯一個從 Page 基類派生或從使用 @ Page 指令的 Inherits 屬性定義的自定義基類派生的新類。例如,如果在應用程序的根目錄中創建一個名爲 SamplePage1 的新 ASP.NET 網頁,則隨後將從 Page 類派生一個名爲 ASP.SamplePage1_aspx 的新類。對於應用程序子文件夾中的頁,將使用子文件夾名稱作爲生成的類的一部分。生成的類中包含 .aspx 頁中的控件的聲明以及您的事件處理程序和其他自定義代碼。

在生成頁之後,生成的類將編譯成程序集,並將該程序集加載到應用程序域,然後對該頁類進行實例化並執行該頁類以將輸出呈現到瀏覽器。如果對影響生成的類的頁進行更改(無論是添加控件還是修改代碼),則已編譯的類代碼將失效,並生成新的類。有關在 ASP.NET 中進行編譯的更多信息,請參見 ASP.NET 編譯概述

下圖顯示了單文件 ASP.NET 網頁中的頁類的繼承模型:

類層次結構,單個文件頁

代碼隱藏頁

在代碼隱藏模型中,頁的標記和服務器端元素(包括控件聲明)位於 .aspx 文件中,而您的頁代碼則位於單獨的代碼文件中。該代碼文件包含一個分部類,即具有關鍵字 partial(在 Visual Basic 中爲 Partial)的類聲明,以表示該代碼文件只包含構成該頁的完整類的全體代碼的一部分。在分部類中,添加應用程序要求該頁所具有的代碼。此代碼通常由事件處理程序構成,但是也可以包括您需要的任何方法或屬性。

代碼隱藏頁的繼承模型比單文件頁的繼承模型要稍微複雜一些。模型如下:

  1. 代碼隱藏文件包含一個繼承自基頁類的分部類。基頁類可以是 Page 類,也可以是從 Page 派生的其他類。

  2. .aspx 文件在 @ Page 指令中包含一個指向代碼隱藏分部類的 Inherits 屬性。

  3. 在對該頁進行編譯時,ASP.NET 將基於 .aspx 文件生成一個分部類;此類是代碼隱藏類文件的分部類。生成的分部類文件包含頁控件的聲明。使用此分部類,您可以將代碼隱藏文件用作完整類的一部分,而無需顯式聲明控件。

  4. 最後,ASP.NET 生成另外一個從在步驟 3 中生成的類繼承的類。生成的第二個類包含生成該頁所需的代碼。生成的第二個類和代碼隱藏類將編譯成程序集,運行該程序集可以將輸出呈現到瀏覽器。

下圖顯示了代碼隱藏 ASP.NET 網頁中的頁類的繼承模型:

類層次結構,代碼隱藏頁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章