ASP.NET 網頁類別概觀

更新:2007 年 11 月

當要求 ASP.NET 網頁並在瀏覽器呈現標記時,執行的程式碼不僅是為頁面而建立的程式碼。而是在執行階段,ASP.NET 會產生並編譯一或多個類別,這些類別會實際進行執行此頁面的所需工作。此主題會提供在執行階段產生的程式碼概觀。

產生和執行頁面類別程式碼

一個 ASP.NET 網頁會以一個單元個體加以執行,它結合了頁面中的伺服器端項目 (例如控制項) 以及您撰寫的事件處理程式碼。您不必將頁面先行編譯至組件中。ASP.NET 會在使用者第一次要求頁面時動態編譯該頁面並執行。如果對頁面進行任何變更或者對頁面所依據的資源進行變更,就會自動重新編譯頁面。編譯器建立的類別會視頁面是使用單一檔案模型或程式碼後置模型而定。

ASP.NET 也支援先行編譯網站,以增強效能並執行錯誤檢查與支援網站部署。如需詳細資訊,請參閱 ASP.NET 網站先行編譯概觀。先行編譯適用於單一檔案和程式碼後置的頁面模型,而且兩種模型的編譯器輸出都相同。

單一檔案頁面

在單一檔案頁面中,標記、伺服器端項目,以及事件處理程式碼都在單一 .aspx 檔案裡。在編譯頁面時,編譯器會產生及編譯新類別,該類別衍生自基底 Page 類別或以 @ Page 指示詞的 Inherits 屬性 (Attribute) 所定義的自訂基底類別。例如,如果您在應用程式的根目錄中建立名為 SamplePage1 的新 ASP.NET Web 網頁,則名為 ASP.SamplePage1_aspx 的新類別是衍生自 Page 類別。對於應用程式子資料夾內的頁面而言,子資料夾名稱會做為產生之類別的一部分。產生之類別包含 .aspx 頁面中的控制項宣告,並包含事件處理常式和其他自訂程式碼。

產生頁面之後,產生的類別會編譯至組件中、組件會載入應用程式定義域,接著執行個體化並執行頁面類別以便在瀏覽器中呈現輸出。如果您對頁面進行會影響所產生類別的變更 (無論是加入控制項或修改程式碼),都會使編譯的類別程式碼失效並產生新類別。如需 ASP.NET 的編譯詳細資訊,請參閱 ASP.NET 編譯概觀

下圖顯示在單一檔案 ASP.NET Web 網頁中頁面類別的繼承模型︰

程式碼後置頁面

在程式碼後置模型中,頁面的標記和伺服器端項目 (包括控制項宣告) 都是在 .aspx 檔案中,而頁面程式碼則是在不同的程式碼檔案中。程式碼檔案會包含部分類別,也就是具有關鍵字 partial (在 Visual Basic 中為 Partial) 的類別宣告,指出它只包含某些構成頁面完整類別的總體程式碼。在部分類別中,可加入頁面所需之應用程式的程式碼。一般是由事件處理常式組成,但是可以包含您需要的任何方法或屬性。

程式碼後置頁面的繼承模型會比單一檔案頁面的繼承模型還稍微複雜一些。模型如下所示︰

  1. 程式碼後置的檔案會包含繼承自基底頁面類別的部分類別。基底頁面類別可以是 Page 類別,或者是從 Page 衍生的另一個類別。

  2. .aspx 檔案包含指向程式碼後置部分類別之 @ Page 指示詞中的 Inherits 屬性。

  3. 編譯頁面時,ASP.NET 會根據 .aspx 檔案產生部分類別,此類別是程式碼後置類別檔案的部分類別。產生的部分類別檔案包含頁面的控制項宣告。此部分類別讓程式碼後置的檔案可當做完整類別的一部分使用,而不需要您明確地宣告控制項。

  4. 最後,ASP.NET 會產生從步驟 3 所產生之類別繼承而來的其他類別。此第二個產生的類別則包含建置 (Build) 頁面時所需的程式碼。第二個產生之類別和程式碼後置的類別都會編譯到組件中,執行此組件即可於瀏覽器中呈現輸出。

下圖顯示程式碼後置 ASP.NET Web 網頁中頁面類別的繼承模型︰

請參閱

概念

ASP.NET Web 網頁程式碼模型