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

Page_Load是怎样被执行的的更多相关文章
- Page_Load与Page_PreRender的执行顺序
原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] Page_PreRender 服务器控件将要呈现给其包含的 控件时发生。简单的理解为page中的控件渲染调用此事件 ...
- [随记][asp.net基础]Page_Load和OnLoad
标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...
- Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ?
Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ? 之前有讨论过ASP.NET Web Form "事件"里面的 "sender ...
- ASP.NET相关事件及JS的执行顺序
实验代码: ASPX: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="We ...
- ASP.Net页面生存周期、Page_Load方法
一.ASP.Net Web应用程序中的请求处理过程 二. http模块生命周期: 三.Asp.NET页面生命周期 1.阶段 阶段 说明 请求页面(Page Request) 严格地说,这个阶段不是页面 ...
- 使用脚本操作UpdatePanel中控件的问题
假设有一个脚本(用js或者jQuery等类似手段编写),为UpdatePanel中的一个普通的TextBox赋值.如果你以为这样写: <head runat="server" ...
- pages与页面配置
全局定义页特定配置设置,如配置文件范围内的页和控件的 ASP.NET 指令.能配置当前Web.config目录下的所有页面的设置. <pages buffer="[True|False ...
- 【深入ASP.NET原理系列】--ASP.NET页面生命周期
前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...
- Asp.Net在多线程环境下的状态存储问题
在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...
随机推荐
- where_1
(二)WHERE //where不单独使用,与match,optional match,start,with搭配 where 与match,optional match 一起用,表示约束 where ...
- hdu6069 多校Counting Divisors
思路:对于n^k其实就是每个因子的个数乘了一个K.然后现在就变成了求每个数的每个质因子有多少个,但是比赛的时候只想到sqrt(n)的分解方法,总复杂度爆炸,就一直没过去,然后赛后看官方题解感觉好妙啊! ...
- Java关键字解释及作用
JAVA 关键字及其作用解释 1. 访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类.方法或字段(在类中声明的变量). 只能在声明 private(内部)类 ...
- 2018.11.14 uoj#34. 多项式乘法(ntt)
传送门 今天学习nttnttntt. 其实递归方法和fftfftfft是完全相同的. 只不过fftfftfft的单位根用的是复数中的东西,而nttnttntt用的是数论里面有相同性质的原根. 代码: ...
- Java泛型总结——吃透泛型开发
什么是泛型 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现. 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用objec ...
- vue.js实战(文摘)
---------------第1篇 基础篇 第1章 初始vue.js 第2章 数据绑定和第一个vue应用 第3章 计算属性 第4章 v-bind及class与style绑定 第5章 内置命令 第6章 ...
- 端口报错listen eaddrinuse:::xxx
端口报错 listen eaddrinuse:::xxx 表示这个端口被占用 结束正在使用此端的程序即可.
- function类型(c++11)
1.c++五大可调用的对象 可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函 ...
- maven使用中遇到的问题
一>手动将jar包安装到仓库的命令示例: 首先:编写命令:mvn install:install-file -Dfile=D:\lucene-highlighter-4.10.2.jar -Dg ...
- 20155205 2016-2017-2 《Java程序设计》第6周学习总结
20155205 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 在Java中,输入串流代表对象为Java.io.InputStream实例,输出串流 ...