关于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. Java JMX 监管

    Java JMX 监管 JSR 规范系列目录(https://www.cnblogs.com/binarylei/p/10348178.html) JMX(Java Management Extens ...

  2. 让UI设计师崩溃的瞬间,你经历过哪些?

    隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通.流畅的沟通,和声细语,是有如时雨之化者:无效 ...

  3. 20180613更新 leetcode刷题

    最近就是忙工作项目 工作间隙就刷了刷LEETCODE 所以没啥更新 // 1111111.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #i ...

  4. 用php把access数据库导入到mysql

    <?php header("content-Type: text/html; charset=utf-8"); /// ///把access数据库转换成mysql的SQL语句 ...

  5. MarkDown,写出个性、漂亮的文档

    http://www.markdown.cn # Title1## Title2### Title3content==content2--content3--* name- name+ name * ...

  6. 再读c++primer plus 001

    1. OOP强调的是在运行阶段(而不是编译阶段)进行决策,运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时. 2.变量的值都存储在栈中,而new从被称为堆或自由存储区的内存区域分配内 ...

  7. MySql常用命令集

    MySql 常用命令集 Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop ...

  8. 2019.01.13 bzoj1146: [CTSC2008]网络管理Network(整体二分+树剖)

    传送门 题意简述:给一棵树,支持单点修改,询问路径上两点间第kkk大值. 思路: 读懂题之后立马可以想到序列上带修区间kkk大数的整体二分做法,就是用一个bitbitbit来支持查值. 那么这个题把树 ...

  9. JSAAS 平台实现 微信类似的TOKEN机制

    在企业微信中,我们在调用微信接口时,我们需要首先获取token,然后根据token,调用API接口方法.这个token是有生命周期的,微信的token默认的生命周期是7200秒. 因此这个token可 ...

  10. Codeforces Round #523 (Div. 2) F. Katya and Segments Sets (交互题+思维)

    https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每 ...