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

  • 相关阅读:
    flexible
    arcgis
    vue 语法糖
    sass 的安装 编译 使用
    nodeJs
    微信小程序
    linux cgroups 简介
    git命令
    sublime笔记
    工程优化学习(进退法、黄金分割法、二次插值法、三次插值法、最速下降法)
  • 原文地址:https://www.cnblogs.com/dwBurning/p/AspNetStudy.html
Copyright © 2020-2023  润新知