关于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是怎样被执行的的更多相关文章

  1. Page_Load与Page_PreRender的执行顺序

    原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] Page_PreRender 服务器控件将要呈现给其包含的 控件时发生。简单的理解为page中的控件渲染调用此事件 ...

  2. [随记][asp.net基础]Page_Load和OnLoad

    标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...

  3. Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ?

    Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ? 之前有讨论过ASP.NET Web Form "事件"里面的 "sender ...

  4. ASP.NET相关事件及JS的执行顺序

    实验代码: ASPX: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="We ...

  5. ASP.Net页面生存周期、Page_Load方法

    一.ASP.Net Web应用程序中的请求处理过程 二. http模块生命周期: 三.Asp.NET页面生命周期 1.阶段 阶段 说明 请求页面(Page Request) 严格地说,这个阶段不是页面 ...

  6. 使用脚本操作UpdatePanel中控件的问题

    假设有一个脚本(用js或者jQuery等类似手段编写),为UpdatePanel中的一个普通的TextBox赋值.如果你以为这样写: <head runat="server" ...

  7. pages与页面配置

    全局定义页特定配置设置,如配置文件范围内的页和控件的 ASP.NET 指令.能配置当前Web.config目录下的所有页面的设置. <pages buffer="[True|False ...

  8. 【深入ASP.NET原理系列】--ASP.NET页面生命周期

    前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...

  9. Asp.Net在多线程环境下的状态存储问题

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...

随机推荐

  1. @PostConstruct和@PostConstruct 注解 及ehcache 缓存 执行过程 小记

    @PostConstruct 和@PostConstruct 注解 从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstr ...

  2. spring 的 ApplicationContext.getBean(type) 无法获取bean,报错

    具体问题请看   https://q.cnblogs.com/q/108101/ 研究了两天: 经过上文中的排除法: 造成问题的原因是要获取的bean 中 有被切入的方法.. 就是可能该类会使用反射生 ...

  3. 重新设置Linux的IP地址(该操作会永久更改ip地址)

    1.查看你当前的IP地址 2.进入配置文件进行更改IP地址 3.上图我使用的是ifcfg-eth1 ,然后进行更改这个文件 4.点击“insert”进行编辑改文档,吧对应的IP改成你想要的地址 更改完 ...

  4. VSFTPD虚拟用户配置

    转载:http://www.cnblogs.com/allenjin/archive/2011/12/03/2274542.html 以下操作验证OK!!!! VSFTPD虚拟用户配置 VSFTP = ...

  5. tensorflow初始化函数变更

    变量初始化函数改变 老版本:initialize_all_variables()(2017-03-02之后删除) 新版本:global_variables_initializer()

  6. JWT设计实现

    一.JWT基于token的认证流程: 二.JWT SDK的选取: https://jwt.io/ 三.编写JWT Helper: 1.获取token 设置密钥,规定算法,设置过期时间,设置发行方,生命 ...

  7. 【Git】 GitLab服务器社区版安装与配置

    GitLab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 GitLab系统架构 当~git在图片中引用时,它表示git用户的主目录 ...

  8. 数据分析处理库pandas及可视化库Matplotlib

    一.读取文件 1)读取文件内容 import pandas info = pandas.read_csv('1.csv',encoding='gbk') # 获取文件信息 print(info) pr ...

  9. oracle 重建分区索引

    分区表的所有分区相当于一个单独的表. 创建在分区表上的索引,就相当于在所有分区上单独创建的索引(主键索引除外). 重建分区表的索引回报: ORA-14086:不能将分区索引作为整体重建. so,重建语 ...

  10. ios 数组和字典

    一.数组.  数组只能存放对象类型的数据  2.数组中的对象是有序的 (index)     (一)可变数组   NSArray:NSObject  不可变数组 作用:容器类 存放的是对象类型的数据, ...