今天整理了一下ASP执行过程,从.net页码的执行周期开始做一个详细的了解.我重写了页面的绝大多数方法.然后加载执行.所得的顺序如下。

方法是每个重写的事件中都输出一个字符,按字符打印出来的先后判断事件执行的顺序。如有不正确之处,还请路过的各位不吝赐教)

前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head> <body>
<form id="form1" runat="server">
<div>
<asp:button runat="server" text="Button" onclick="Unnamed1_Click" />
</div>
</form>
</body>
</html>

后台代码

    public partial class WebForm1 : System.Web.UI.Page
{
private static int count = ;
//
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(count + ".Page_Load <br />");
count++;
} //
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
Response.Write(count + ".OnPreInit <br />");
count++;
}
//
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Response.Write(count + ".OnInit <br />");
count++;
}
//
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Response.Write(count + "OnLoad<br/>");
count++;
}
//
protected override void OnPreLoad(EventArgs e)
{
base.OnPreLoad(e);
Response.Write(count + "OnPreLoad<br/>");
count++;
}
//4 9
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
Response.Write(count + "OnLoadComplete<br/>");
count++;
} protected override void OnInitComplete(EventArgs e)
{
base.OnInitComplete(e);
Response.Write(count + "OnInitComplete<br/>");
count++;
}
protected override void OnUnload(EventArgs e)
{
base.OnUnload(e);
//Response.Write(count + "OnUnload<br/>");
count=;
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
Response.Write(count + "OnDataBinding<br/>");
count++;
}
//
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Response.Write(count + "OnPreRender<br/>");
count=;
}
//
protected void Unnamed1_Click(object sender, EventArgs e)
{ Response.Write(count + "Unnamed1_Click<br/>");
count++;
} }

根据源码可以看到asp页面的执行顺序,

其实是个很简单的内容。顺便写下Page事件:

事件处理器名称

发生时间

Page_Init

在Web窗体的视图状态加载服务器控件并对其初始化。

这是web窗体生命周期的第一步

Page_Load

在Page对象上载入服务器控件。由于此时视图状态信息是可以使用的,

因此载这里可以用代码来改变空间的设置或者载页面上显示文本。

Page_PreRender

应用程序将要呈现Page对象

Page_Unload

页面从内存中卸载

Page_Error

发生未处理的异常

Page_AbortTransaction

事务处理被终止

Page_CommitTransaction

事务处理被接受

Page_DataBinding

把页面上的服务器空间和数据源绑定载一起

Page_Disposed

Page对象从内存中释放掉。这是Page对象生命周期中的最后一个事件

注意:
1)切记用户控件也被视为页面中的一个控件;
2)把用户控件作为单独的一个特殊页面来看,它本身及其所包含的控件同样遵守相同的规律;
3)有时在客户端程序(如javascript)中会用到客户端body对像的onload事件,注意这个客户端事件是最后执行,即在服务器端所有事件执行完后才执行。

参考     关于asp.net中页面事件加载的先后顺序

ASP.NET 页面执行顺序详解的更多相关文章

  1. Unity 继承MonoBehaviour脚本 执行顺序 详解

    先看结果 Awake ->OnEnable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ...

  2. Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程

    前言 百度了一下才知道,传智的邹老师桃李满天下呀,我也是邹老师的粉丝,最开始学习页面生命周期的时候也是看了邹老师的视频. 本人是参考了以下前辈的作品,本文中也参合了本人心得,绝非有意盗版,旨在传播,最 ...

  3. javascript运行机制之执行顺序详解(转)

    转自http://www.admin10000.com/document/3385.html JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言, ...

  4. javascript 执行顺序详解

    JavaScript是一种描述 型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript 语言的运行机制,或者简 ...

  5. React生命周期执行顺序详解

    文章内容转载于https://www.cnblogs.com/faith3/p/9216165.html 一.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.compo ...

  6. JavaScript 运行机制之执行顺序详解

    JavaScript是一种描述型脚本语言,它不同于 Java 或 C# 等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解 JavaScript 语言的运行机制 ...

  7. 【Node.js】Event Loop执行顺序详解

    本文基于node 0.10.22版本 关于EventLoop是什么,请看阮老师写的什么是EventLoop 本文讲述的是EventLoop中的执行顺序(着重讲setImmediate, setTime ...

  8. async/await 执行顺序详解

    随着async/await正式纳入ES7标准,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 ...

  9. Python装饰器执行顺序详解

    探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思. 疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会 ...

随机推荐

  1. centos7.3给搭建SVN服务器

    centos7.3给搭建SVN服务器 1 安装svnserver yum install subversion 2 查看版本 svnserve --version 3 创建版本库 3.1 运行以下命令 ...

  2. uwsgi的python2+3多版本共存实操使用virtualenv

    1首先,机器需要有python2和python3的可执行环境.确保pip和pip3命令可用.原理就是在哪个环境下安装uwsgi.uwsgi启动的时候,就用的哪个python版本 2安装virtuale ...

  3. Supervisor安装与配置

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...

  4. git备忘

    git checkout . 放弃本地修改

  5. Drools5

    参考:https://wenku.baidu.com/view/a6516373f242336c1eb95e7c.html   (比较好的 但是是drl 原生的) 参考2:http://asialee ...

  6. eclipse 预览Android界面报错

    This version of the rendering library is more recent than your version of ADT plug-in. Please update ...

  7. 删除.svn 文件

    新建一个delete_svn.bat文件 @echo on color 2f mode con: cols= lines= @REM @echo 正在清理SVN文件,请稍候...... @rem 循环 ...

  8. Linux 文件管理命令语法、参数、实例全汇总(一)

    命令:cat   cat 命令用于连接文件并打印到标准输出设备上. 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数 ...

  9. arcgis mpk 打包地图 (数据管理)

    摘要 来自:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/0017000000q5000000/ 对地图文档以 ...

  10. LinuxC编程怎么MakeFile

    在linux下我们都知道可以利用命令gcc hello.c -o hello 命令来变异c语言程序.其中gcc hello.c -o hello中 hello是给这个编译后生成的可执行文件取个别名 再 ...