天天看點

ASP.NET頁面對象模型:Page類介紹

ASP.NET頁面對象模型簡介

Microsoft Internet 資訊服務 (IIS) 所收到的對某 Microsoft ASP.NET 頁面的每個請求都被移交給 ASP.NET HTTP 管線。HTTP 管線由一系列托管對象組成,這些對象按順序處理該請求,并完成從 URL 到普通 HTML 文本的轉換。HTTP 管線的入口點是 HttpRuntime 類。ASP.NET 基礎結構為輔助程序中所承載的每個 AppDomain 建立此類的一個執行個體(請注意,該輔助程序為目前正在運作的每個 ASP.NET 應用程式維護一個不同的 AppDomain)。

HttpRuntime 類從内部池中選取一個 HttpApplication 對象,并讓其處理該請求。HTTP 應用程式管理器所完成的主要任務就是找出将實際處理該請求的類。如果請求 .aspx 資源,則處理程式就是一個頁面處理程式 — 即某個繼承自 Page 的類的一個執行個體。資源類型和處理程式類型之間的關聯關系存儲于該應用程式的配置檔案中。更準确地說,在 machine.config 檔案的 < httpHandlers> 部分中定義預設的一組映射關系。然而,應用程式也可以在本地的 web.config 檔案中自定義自己的 HTTP 處理程式清單。下面的程式行舉例說明了定義用于 .aspx 資源的 HTTP 處理程式的代碼。

< add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/> 

擴充名可關聯到一個處理程式類,或者更普遍地關聯到一個處理程式工廠 (handler factory) 類。在所有情況下,負責處理請求的 HttpApplication 對象都會獲得一個實作 IHttpHandler 接口的對象。如果根據 HTTP 處理程式來解析關聯資源/類,那麼所傳回的類将直接實作該接口。如果資源綁定到處理程式工廠,則需要另外一個步驟。處理程式工廠類實作 IHttpHandlerFactory 接口,而該接口的 GetHandler 方法傳回一個基于 IHttpHandler 的對象。

HTTP 運作時如何能完成整個循環并處理頁面請求呢?IHttpHandler 接口特别提供了 ProcessRequest 方法。通過對代表所請求頁面的對象調用此方法,ASP.NET 基礎結構啟動相應過程,進而針對浏覽器生成輸出。

ASP.NET頁面對象模型:Page類

特定頁面的 HTTP 處理程式類型取決于 URL。當首次調用 URL 時,将建構一個新類并将該類動态地編譯成一個程式集。用于檢查 .aspx 來源的文法分析過程的輸出結果就是該類的源代碼。該類被定義為 ASP 命名空間的一部分,并被賦予一個與原始 URL 相似的名稱。例如,如果 URL 終結點是 page.aspx,則類名稱為 ASP.Page_aspx。但是,也可通過程式設計設定 @Page 指令的 ClassName 屬性來控制類的名稱。

HTTP 處理程式的基類是 Page。此類定義了所有頁面處理程式所共享的方法和屬性的最小集合。Page 類中實作 IHttpHandler 接口。

在某些情況下,實際處理程式的基類并非 Page,而是一個不同的類。例如,如果使用了代碼隐藏,就會出現這種情況。代碼隐藏是一種開發方法,它将頁面所需的代碼封裝到一個單獨的 C# 或 Microsoft Visual Basic.NET 類中。頁面的代碼就是一組事件處理程式和幫助器方法,用以實際建立該頁面的行為。可以利用 < script runat=server> 标記将這種代碼定義為内聯代碼,或者也可将其放到一個外部類 — 代碼隐藏類中。代碼隐藏類是一種繼承自 Page 的類,但這種類具有一些額外的方法因而比較特殊。如果指定,代碼隐藏類就用作 HTTP 處理程式的基類。

還有一種情況,即當應用程式配置檔案的 < pages> 部分中重新定義了 PageBaseType 屬性時,HTTP 處理程式也不是基于 Page 的。

< pages PageBaseType="Classes.MyPage, mypage" /> 

PageBaseType 屬性指出了包含頁面處理程式的基類的類型以及程式集。派生自 Page 的這個類可自動給處理程式賦予一組自定義和擴充的方法和屬性。

以上就對ASP.NET頁面對象模型做了一些簡單的介紹。

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2010/12/28/1918937.html,如需轉載請自行聯系原作者