相关源码

页面的Process方法

 // System.Web.UI.Page
 private void ProcessRequest(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
 {
     if (includeStagesBeforeAsyncPoint)
     {
         //调用子类的方法(这是个虚方法),1,创建页面控件树
         this.FrameworkInitialize();
         base.ControlState = ControlState.FrameworkInitialized;
     }
     bool flag = this.Context.WorkerRequest is IIS7WorkerRequest;
     try
     {
         try
         {
             if (this.IsTransacted)
             {
                 this.ProcessRequestTransacted();
             }
             else
             {
                 //页面声明周期的主要部分
                 this.ProcessRequestMain(includeStagesBeforeAsyncPoint, includeStagesAfterAsyncPoint);
             }
             if (includeStagesAfterAsyncPoint)
             {
                 flag = false;
                 this.ProcessRequestEndTrace();
             }
         }
         catch (ThreadAbortException)
         {
             try
             {
                 if (flag)
                 {
                     this.ProcessRequestEndTrace();
                 }
             }
             catch
             {
             }
         }
         finally
         {
             if (includeStagesAfterAsyncPoint)
             {
                 this.ProcessRequestCleanup();
             }
         }
     }
     catch
     {
         throw;
     }
 }

ProcessRequestMain方法

 // System.Web.UI.Page
 private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
 {
     try
     {
         HttpContext context = this.Context;
         string text = null;
         if (includeStagesBeforeAsyncPoint)
         {
             if (this.IsInAspCompatMode)
             {
                 AspCompatApplicationStep.OnPageStartSessionObjects();
             }
             if (this.PageAdapter != null)
             {
                 this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();
             }
             else
             {
                 this._requestValueCollection = this.DeterminePostBackMode();
             }
             string text2 = string.Empty;
             if (this.DetermineIsExportingWebPart())
             {
                 if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)
                 {
                     throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));
                 }
                 text = this.Request.QueryString["webPart"];
                 if (string.IsNullOrEmpty(text))
                 {
                     throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));
                 }
                 if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase))
                 {
                     );
                 }
                 string text3 = this.Request.QueryString["query"];
                 if (text3 == null)
                 {
                     text3 = string.Empty;
                 }
                 this.Request.QueryStringText = text3;
                 context.Trace.IsEnabled = false;
             }

             //2,确定IsCallback值
             if (this._requestValueCollection != null)
             {
                 if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null)
                 {
                     this.ContainsEncryptedViewState = true;
                 }
                 text2 = this._requestValueCollection["__CALLBACKID"];
                 if (text2 != null && this._request.HttpVerb == HttpVerb.POST)
                 {
                     this._isCallback = true;
                 }
                 else
                 {
                     if (!this.IsCrossPagePostBack)
                     {
                         VirtualPath virtualPath = null;
                         if (this._requestValueCollection["__PREVIOUSPAGE"] != null)
                         {
                             try
                             {
                                 virtualPath = VirtualPath.CreateNonRelativeAllowNull(Page.DecryptString(this._requestValueCollection["__PREVIOUSPAGE"]));
                             }
                             catch
                             {
                                 ] = true;
                             }
                             if (virtualPath != null && virtualPath != this.Request.CurrentExecutionFilePathObject)
                             {
                                 ] = true;
                                 this._previousPagePath = virtualPath;
                             }
                         }
                     }
                 }
             }
             if (this.MaintainScrollPositionOnPostBack)
             {
                 this.LoadScrollPosition();
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin PreInit");
             }
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest);
             }

             //3.1初始化PreInit
             this.PerformPreInit();
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End PreInit");
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin Init");
             }
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);
             }
             //3.2递归初始化,因为要初始化树,所以用递归
             this.InitRecursive(null);
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End Init");
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin InitComplete");
             }
             //3.3,初始化完成
             this.OnInitComplete(EventArgs.Empty);
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End InitComplete");
             }
             if (this.IsPostBack)
             {
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "Begin LoadState");
                 }
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);
                 }
                 //4.1,加载ViewState
                 this.LoadAllState();
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);
                 }
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "End LoadState");
                     this.Trace.Write("aspx.page", "Begin ProcessPostData");
                 }
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);
                 }
                 //4.2,处理回发数据
                 this.ProcessPostData(this._requestValueCollection, true);
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);
                 }
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "End ProcessPostData");
                 }
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin PreLoad");
             }
             //5.1页面预加载
             this.OnPreLoad(EventArgs.Empty);
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End PreLoad");
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin Load");
             }
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);
             }
             //5.2页面递归加载
             this.LoadRecursive();
             , ))
             {
                 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End Load");
             }
             if (this.IsPostBack)
             {
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");
                 }
                 //5.3第二次尝试加载回发数据
                 this.ProcessPostData(this._leftoverPostData, false);
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "End ProcessPostData Second Try");
                     this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");
                 }
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);
                 }
                 //6.1,触发Change事件
                 this.RaiseChangedEvents();
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);
                 }
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "End Raise ChangedEvents");
                     this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");
                 }
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);
                 }
                 //6.2,触发点击事件
                 this.RaisePostBackEvent(this._requestValueCollection);
                 , ))
                 {
                     EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);
                 }
                 if (context.TraceIsEnabled)
                 {
                     this.Trace.Write("aspx.page", "End Raise PostBackEvent");
                 }
             }
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "Begin LoadComplete");
             }
             //5.3,页面加载完成
             this.OnLoadComplete(EventArgs.Empty);
             if (context.TraceIsEnabled)
             {
                 this.Trace.Write("aspx.page", "End LoadComplete");
             }
             if (this.IsPostBack && this.IsCallback)
             {
                 this.PrepareCallback(text2);
             }
             else
             {
                 if (!this.IsCrossPagePostBack)
                 {
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "Begin PreRender");
                     }
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);
                     }

                     //7,递归预渲染
                     this.PreRenderRecursiveInternal();
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);
                     }
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "End PreRender");
                     }
                 }
             }
         }
         if (this._asyncInfo == null || this._asyncInfo.CallerIsBlocking)
         {
             this.ExecuteRegisteredAsyncTasks();
         }
         this._request.ValidateRawUrl();
         if (includeStagesAfterAsyncPoint)
         {
             if (this.IsCallback)
             {
                 this.RenderCallback();
             }
             else
             {
                 if (!this.IsCrossPagePostBack)
                 {
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "Begin PreRenderComplete");
                     }
                     this.PerformPreRenderComplete();
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "End PreRenderComplete");
                     }
                     if (context.TraceIsEnabled)
                     {
                         this.BuildPageProfileTree(this.EnableViewState);
                         this.Trace.Write("aspx.page", "Begin SaveState");
                     }
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);
                     }
                     //8,保存页面状态到ViewState
                     this.SaveAllState();
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);
                     }
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "End SaveState");
                         this.Trace.Write("aspx.page", "Begin SaveStateComplete");
                     }
                     this.OnSaveStateComplete(EventArgs.Empty);
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "End SaveStateComplete");
                         this.Trace.Write("aspx.page", "Begin Render");
                     }
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);
                     }
                     if (text != null)
                     {
                         this.ExportWebPart(text);
                     }
                     else
                     {
                         //9,渲染出HTML
                         this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
                     }
                     , ))
                     {
                         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);
                     }
                     if (context.TraceIsEnabled)
                     {
                         this.Trace.Write("aspx.page", "End Render");
                     }
                     this.CheckRemainingAsyncTasks(false);
                 }
             }
         }
     }
     catch (ThreadAbortException ex2)
     {
         HttpApplication.CancelModuleException ex = ex2.ExceptionState as HttpApplication.CancelModuleException;
         if (!includeStagesBeforeAsyncPoint || !includeStagesAfterAsyncPoint || this._context.Handler != this || this._context.ApplicationInstance == null || ex == null || ex.Timeout)
         {
             this.CheckRemainingAsyncTasks(true);
             throw;
         }
         this._context.ApplicationInstance.CompleteRequest();
         Page.ThreadResetAbortWithAssert();
     }
     catch (ConfigurationException)
     {
         throw;
     }
     catch (Exception e)
     {
         PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);
         PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);
         if (!this.HandleError(e))
         {
             throw;
         }
     }
 }

Asp.Net原理Version3.0_页面声明周期的更多相关文章

  1. 【译】ASP.NET应用程序和页面生命周期

    为何翻译此文 一.此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量: 二.锻炼自己的英文技术文章翻译能力,提高英文技术文档阅读能力: 三.了解掌握ASP. ...

  2. 【转载】ASP.NET应用程序与页面生命周期

    在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束.在这个过程 ...

  3. ASP.NET最常用的页面生命周期事件

    PreInit:在页生命周期的早期阶段可以访问的事件.在PreInit事件后,将加载个性化信息和页主题. Init:在所有的控件都已初始化,且已应用所有外观设置后引发.使用该事件来读取或初始化控件属性 ...

  4. ASP.NET应用程序与页面生命周期

    http://www.cnblogs.com/suizhouqiwei/archive/2012/08/15/2637775.html

  5. asp.net请求管道和页面生命周期

  6. Asp.Net原理Version2.0

    有些部分被省略,可以看看Asp.Net原理Version1.0 Asp.Net原理Version3.0_页面声明周期

  7. Asp.Net原理Version1.0

    Asp.Net原理Version2.0 Asp.Net原理Version3.0_页面声明周期

  8. ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

    开篇:上一篇我们了解了所谓的请求处理管道,在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计.本篇,我们来看看WebForm模式下的页面生命周期. ( ...

  9. WebForm页面生命周期及asp.net运行机制

    1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向客户输出它请求的动态页面生成的html代码. 3.服务器不 ...

随机推荐

  1. 1 ubuntu下装setuptools

    setuptools可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况,分享以下我在ubuntu下装setuptools的过程 系统:ubuntu 语言:python ...

  2. 使用命令修改ip地址

    简述:以serverv 2012 r2为例 常用的几种,当然不全,希望能较快的速率记下一种便可 直接配置 1.      查看网卡的显示名称 2.      配置静态iP地址 3.      查看配置 ...

  3. js 倒计时 button不可用

    function showtime() { fun_timedown(5); } function fun_timedown(time) { $("#timedown").val( ...

  4. 关于IIS中WEB网站访问弹“验证输入框”及“401限制访问”的解决办法

    最近在配置IIS网站的过程中,不管是本地还是外部访问配置的网站,出现了需要输入用户名.密码.及域的对话框,解决之后又出现页面401限制访问的错误页面. 就这两项错误,依次做一下解决办法的整理. 解决流 ...

  5. SharpMap V1.1 For Web教程系列之——前言

    上次使用SharpMap还是在0.9版本阶段,那个时候主要是为了将SharpMap移植到Windows Mobile环境中,具体可参见原先的文章.互联网真的是风云变幻啊,才短短几年,Windows M ...

  6. struts2中访问servlet API

    Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts ...

  7. OpenGL 回顾——简化版的窗体(包含鼠标控制,普通键位控制,以及镜面反射)

    // OpenGLBook.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" //变量声明 static GLfloat spin =0.0; ...

  8. 《DNS的正向反向解析》RHEL6

    DNS的正向解析: Iptables –F Setenforce 0 安装DNS服务器的软件包: 启动DNS服务器: 修改DNS的配置文件:vim /etc/named.conf 修改DNS的配置:( ...

  9. 《Apache数据传输加密、证书的制作》——涉及HTTPS协议

    首先了解http和https: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议. HTTPS和HTTP的区别: http是超文本传输协议,信息是明 ...

  10. 第四届蓝桥杯C/C++A组题目:振兴中华

    首先把题目贴上来吧! 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图1) 从我做起振 我做起振兴 做起振兴中 起振兴中华 图1 比 ...