2011-08-18 84 views
3

第一次請求default.aspx頁面時會發生什麼?第一次請求default.aspx頁面時會發生什麼?

.net純粹是一個純粹的面向對象的框架。

_default是一個擴展Page的類。

沒有實例化,無法調用Pre-Init,Init,Load。 那麼_default類是如何實例化的? 誰負責?

我想知道非常詳細的技術步驟?

Pleasa澄清!

回答

5

的ASP.Net框架確定該請求是爲default.aspx的頁面,並檢查相應的.aspx文件的標記 - 使用此它基於一個類標記。該類的基類在@Page指令中標識:

<%@ Page ... Inherits="WebApplication1._Default" %> 

它然後創建生成類型的實例 - 該類型從給定的基類繼承,在這種情況下WebApplication1._Default

ASP.Net框架通常不會(以前?)直接創建「代碼隱藏」類的實例。

您可以通過調試一個簡單的Web應用程序看到自己這一點:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // default_asp NOT _Default as you might expect 
     string typeName = this.GetType().Name; 
    } 
} 

這就解釋了爲什麼事件處理程序只需要被標記爲受保護,而不是公衆。

如果您非常熱衷於使用this.GetType().Assembly.CodeBase可以獲得生成的程序集的路徑,請複製該文件並檢查生成的類,如IL Spy

+0

謝謝[Kragen](http://stackoverflow.com/users/113141/kragen)! – MduSenthil

+0

非常有趣的細節,很酷! – sll

+0

我已經探索了簡單的「default.aspx」頁面的IL部分。我很清楚! :) – MduSenthil

1

The ASP.NET Page Object Model

當請求是一個.aspx資源的處理程序是一個頁面 處理,即,從頁面繼承的類的實例。 資源類型和處理程序類型之間的關聯存儲在應用程序的配置文件中

特定頁面的HTTP處理程序的類型取決於URL。 第一次調用URL時,會創建一個新類並動態編譯爲程序集。該類的源代碼是 檢查.aspx源代碼的解析過程的結果。 類被定義爲名稱空間ASP的一部分,並被命名爲 模仿原始URL。例如,如果URL端點是 page.aspx,則該類的名稱是ASP.Page_aspx。儘管如此,類名稱 可以通過在@Page指令中設置ClassName 屬性進行編程控制。

HTTP處理程序的基類是Page。該類定義了所有頁面處理程序共享的最少的一組方法和屬性。 Page類實現IHttpHandler接口。

在幾種情況下,實際處理程序 的基類不是Page,而是一個不同的類。例如,如果使用 代碼隱藏,則會發生這種情況。代碼隱藏是一種開發技術,它將頁面所需的代碼隔離到單獨的C#或Microsoft Visual Basic .NET類中。頁面的代碼是實際創建 頁面的行爲的事件 處理程序和輔助方法的集合。此代碼可以使用 標籤內聯定義,也可以放置在外部類 - 代碼隱藏類中。 A 代碼隱藏類是一種從Page繼承的類,並使用額外的方法專門爲其提供了 。指定時,使用代碼隱藏類 作爲HTTP處理程序的基類。

+0

很好的信息,澄清處理程序 - > Page - > Default.aspx – MduSenthil

1
+0

它真的描述這樣的低級別的東西?我相信這是衆所周知的生命週期,而不是頁面類構建的這種細節,請糾正我,如果我錯了,只是沒有在生命週期概述中找到這個細節 – sll

相關問題