首页 > 其他 > 详细

Page_Load是怎样被执行的

时间:2019-03-03 10:03:44      阅读:173      评论:0      收藏:0      [点我收藏+]

关于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();
}

技术分享图片

Page_Load是怎样被执行的

原文:https://www.cnblogs.com/dwBurning/p/AspNetStudy.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!