關於Asp.Net的生命周期的文章,很多很多,不管是管道生命周期,還是頁面生命周期,圖文並茂的文章並不少,我就不說了,我只是在複習這些知識點的時候,想具體知道一個頁面的Page_Load方法到底是怎麼被調用,被執行的,為什麼訪問一個網址,就可以直接在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(); }