Page_Load是怎樣被執行的


關於Asp.Net的生命周期的文章,很多很多,不管是管道生命周期,還是頁面生命周期,圖文並茂的文章並不少,我就不說了,我只是在復習這些知識點的時候,想具體知道一個頁面的Page_Load方法到底是怎么被調用,被執行的,為什么訪問一個網址,就可以直接在Page_Load中斷點調試了。所以,寫了幾句代碼來模仿一下這個方法被執行的過程。

1.新建一個頁面Default.aspx的時候,首先看到的大概是一個這樣的類,里邊你只能看到這個Page_Load方法

public class Default : Page
{
    public void Page_Load(string test)
    {
        MessageBox.Show(test);
    }
}

2.那么,你從瀏覽器訪問這個Default.aspx的時候,這個Page_Load方法是怎樣被調用的呢?

我們看一下Page類的實現,Page類繼承自IHttpHandler接口,這個接口里邊我只寫了一個方法ProcessRequest,在這個方法里邊調用了OnPageLoad方法,在System.Web.UI.Page這類里邊是有很多的事件和方法的,整個頁面的生命周期也是在ProcessRequest這個方法中執行的,這里只是簡單模擬一下。

public class Page : IHttpHandler
{
    public event Action<string> PageLoad;

    public void OnPageLoad(string test)
    {
        PageLoad(test);
    }

    public void ProcessRequest(string test)
    {
        OnPageLoad(test);
    }
}
public interface IHttpHandler
{
    void ProcessRequest(string test);
}

3.最后一步也是關鍵性的一步,這個ProcessRequest方法是怎么被執行的,這個事件PageLoad與這個方法OnPageLoad,又是怎么關聯上的?

我寫了一個AspNetFrameWork的類來模擬Asp.Net WEB框架做的事情,ASP.NET 頁框架支持以自動方式將頁事件與方法相關聯,只需要設置這個值為true

AutoEventWireup="true"

由此可見,框架是做了很多的事情的,只是你看不到!從管道生命周期到頁面生命周期,關鍵點就是IHttpHandler接口!對於aspx這種資源的請求,配置文件中配置的就是Page類來響應。

public class AspNetFrameWork
{
    public AspNetFrameWork()
    {
        Default myPage = new Default();
        myPage.PageLoad += myPage.Page_Load;
        myPage.ProcessRequest("test");
    }
}

4.最后調用。

private void button1_Click(object sender, EventArgs e)
{
    AspNetFrameWork work = new AspNetFrameWork();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM