第一次請求default.aspx頁面時會發生什麼?第一次請求default.aspx頁面時會發生什麼?
.net純粹是一個純粹的面向對象的框架。
_default是一個擴展Page的類。
沒有實例化,無法調用Pre-Init,Init,Load。 那麼_default類是如何實例化的? 誰負責?
我想知道非常詳細的技術步驟?
Pleasa澄清!
第一次請求default.aspx頁面時會發生什麼?第一次請求default.aspx頁面時會發生什麼?
.net純粹是一個純粹的面向對象的框架。
_default是一個擴展Page的類。
沒有實例化,無法調用Pre-Init,Init,Load。 那麼_default類是如何實例化的? 誰負責?
我想知道非常詳細的技術步驟?
Pleasa澄清!
的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。
當請求是一個.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處理程序的基類。
很好的信息,澄清處理程序 - > Page - > Default.aspx – MduSenthil
它真的描述這樣的低級別的東西?我相信這是衆所周知的生命週期,而不是頁面類構建的這種細節,請糾正我,如果我錯了,只是沒有在生命週期概述中找到這個細節 – sll
謝謝[Kragen](http://stackoverflow.com/users/113141/kragen)! – MduSenthil
非常有趣的細節,很酷! – sll
我已經探索了簡單的「default.aspx」頁面的IL部分。我很清楚! :) – MduSenthil