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),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...
随机推荐
- sqli-labs:24,二次注入
二次排序注入 二次排序注入也称为存储型注入,就是将可能导致 sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发 sql 注入. 二次排序注入思路: 1. 黑客通过构造数据的 ...
- urllib和requests库
目录 1. Python3 使用urllib库请求网络 1.1 基于urllib库的GET请求 1.2 使用User-Agent伪装后请求网站 1.3 基于urllib库的POST请求,并用Cooki ...
- js中将斜杠\替换的方法
js中将/替换的方法replace(/\//g, '-') 中间涉及到js的一些转义问题,试了几个方法,发现这个可以,就记下来.
- 人类及其他物种基因组DNA之问
问题1 : 不同人类个体的基因组长度总长是不是一样,如果不一样,那么人类基因组长度排序和范围区间是如何控制的?最短是多少,最长是多少?如果一样,如何理解基因的插入与缺失,INDEL等现象,如何平衡的呢 ...
- 新版的Bing Developer Assistant 已发布,去掉了Beta
网址:https://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65 新加特性: New Vis ...
- python入门之深浅copy
a1=["a","b","c","aa"] b1=a1 a1[0]=" print(a1,b1) 此时结果为: ...
- 使用Hadoop API 压缩HDFS文件
下篇解压缩:使用Hadoop API 解压缩 HDFS文件 起因: 集群磁盘剩余空间不足. 删除了存储在HDFS上的,一定时间之前的中间结果,发现并不能释放太多空间,查看计算业务,发现,每天的日志存在 ...
- Keras预测股票
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Nov 18 21:22:29 201 ...
- 20) maven 项目结构:all in one
这是最常见的项目结构 垂直结构 也是初学者常用的 也是小项目常用的 优点 全部代码在一个项目里,一目了然. 结构简单易于理解 一开始时小巧 缺点 随之而来的缺点也十分明显 前端项目,后端项目,接口项目 ...
- Python 之 Difflib
Python 之 Difflib 2017年7月8日 word文档地址:https://wenku.baidu.com/view/36692440854769eae009581b6bd97f19237 ...