[英]URL Mapping - Change Default.aspx to virtual page after first page load
[英]What happens when default.aspx page is requested for the first time?
第一次請求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資源時,處理程序是頁面處理程序 - 即繼承自Page的類的實例。 資源類型和處理程序類型之間的關聯存儲在應用程序的配置文件中
特定頁面的HTTP處理程序的類型取決於URL。 第一次調用URL時,將組成一個新類並將其動態編譯為程序集。 該類的源代碼是檢查.aspx源的解析過程的結果。 該類被定義為命名空間ASP的一部分,並被賦予一個模仿原始URL的名稱。 例如,如果URL端點是page.aspx,則該類的名稱為ASP.Page_aspx。 但是,可以通過在@Page指令中設置ClassName屬性來以編程方式控制類名。
HTTP處理程序的基類是Page 。 此類定義所有頁面處理程序共享的最小方法和屬性集。 Page類實現了IHttpHandler接口。
在某些情況下,實際處理程序的基類不是Page而是另一個類。 例如,如果使用代碼隱藏,就會發生這種情況。 代碼隱藏是一種開發技術,它將頁面所需的代碼隔離到單獨的C#或MicrosoftVisualBasic®.NET類中。 頁面代碼是實際創建頁面行為的事件處理程序和幫助程序方法的集合。 此代碼可以使用標記內聯定義,也可以放在外部類中 - 代碼隱藏類。 代碼隱藏類是一個繼承自Page的類,並使用額外的方法對其進行專門化。 指定時,代碼隱藏類用作HTTP處理程序的基類。
我建議你閱讀ASP.NET頁面生命周期概述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.