你的位置:首页 > ASP.net教程

[ASP.net教程]Asp.Net原理Version3.0_页面声明周期


Asp.Net原理Version1.0

Asp.Net原理Version2.0


 
Asp.Net原理第三版.JPG
 
 
 

 
 
 
 
 
19个事件23个步骤.png



相关源码

页面的Process方法

 1 // System.Web.UI.Page 2 private void ProcessRequest(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint) 3 { 4   if (includeStagesBeforeAsyncPoint) 5   { 6     //调用子类的方法(这是个虚方法),1,创建页面控件树 7     this.FrameworkInitialize(); 8     base.ControlState = ControlState.FrameworkInitialized; 9   }10   bool flag = this.Context.WorkerRequest is IIS7WorkerRequest;11   try12   {13     try14     {15       if (this.IsTransacted)16       {17         this.ProcessRequestTransacted();18       }19       else20       {21         //页面声明周期的主要部分22         this.ProcessRequestMain(includeStagesBeforeAsyncPoint, includeStagesAfterAsyncPoint);23       }24       if (includeStagesAfterAsyncPoint)25       {26         flag = false;27         this.ProcessRequestEndTrace();28       }29     }30     catch (ThreadAbortException)31     {32       try33       {34         if (flag)35         {36           this.ProcessRequestEndTrace();37         }38       }39       catch40       {41       }42     }43     finally44     {45       if (includeStagesAfterAsyncPoint)46       {47         this.ProcessRequestCleanup();48       }49     }50   }51   catch52   {53     throw;54   }55 }

View Code

 

ProcessRequestMain方法

 1 // System.Web.UI.Page 2 private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint) 3 { 4   try 5   { 6     HttpContext context = this.Context; 7     string text = null; 8     if (includeStagesBeforeAsyncPoint) 9     { 10       if (this.IsInAspCompatMode) 11       { 12         AspCompatApplicationStep.OnPageStartSessionObjects(); 13       } 14       if (this.PageAdapter != null) 15       { 16         this._requestValueCollection = this.PageAdapter.DeterminePostBackMode(); 17       } 18       else 19       { 20         this._requestValueCollection = this.DeterminePostBackMode(); 21       } 22       string text2 = string.Empty; 23       if (this.DetermineIsExportingWebPart()) 24       { 25         if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport) 26         { 27           throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler")); 28         } 29         text = this.Request.QueryString["webPart"]; 30         if (string.IsNullOrEmpty(text)) 31         { 32           throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument")); 33         } 34         if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase)) 35         { 36           this._pageFlags.Set(4); 37         } 38         string text3 = this.Request.QueryString["query"]; 39         if (text3 == null) 40         { 41           text3 = string.Empty; 42         } 43         this.Request.QueryStringText = text3; 44         context.Trace.IsEnabled = false; 45       } 46        47       //2,确定IsCallback值 48       if (this._requestValueCollection != null) 49       { 50         if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null) 51         { 52           this.ContainsEncryptedViewState = true; 53         } 54         text2 = this._requestValueCollection["__CALLBACKID"]; 55         if (text2 != null && this._request.HttpVerb == HttpVerb.POST) 56         { 57           this._isCallback = true; 58         } 59         else 60         { 61           if (!this.IsCrossPagePostBack) 62           { 63             VirtualPath virtualPath = null; 64             if (this._requestValueCollection["__PREVIOUSPAGE"] != null) 65             { 66               try 67               { 68                 virtualPath = VirtualPath.CreateNonRelativeAllowNull(Page.DecryptString(this._requestValueCollection["__PREVIOUSPAGE"])); 69               } 70               catch 71               { 72                 this._pageFlags[8] = true; 73               } 74               if (virtualPath != null && virtualPath != this.Request.CurrentExecutionFilePathObject) 75               { 76                 this._pageFlags[8] = true; 77                 this._previousPagePath = virtualPath; 78               } 79             } 80           } 81         } 82       } 83       if (this.MaintainScrollPositionOnPostBack) 84       { 85         this.LoadScrollPosition(); 86       } 87       if (context.TraceIsEnabled) 88       { 89         this.Trace.Write("aspx.page", "Begin PreInit"); 90       } 91       if (EtwTrace.IsTraceEnabled(5, 4)) 92       { 93         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest); 94       } 95        96       //3.1初始化PreInit 97       this.PerformPreInit(); 98       if (EtwTrace.IsTraceEnabled(5, 4)) 99       {100         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);101       }102       if (context.TraceIsEnabled)103       {104         this.Trace.Write("aspx.page", "End PreInit");105       }106       if (context.TraceIsEnabled)107       {108         this.Trace.Write("aspx.page", "Begin Init");109       }110       if (EtwTrace.IsTraceEnabled(5, 4))111       {112         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);113       }114       //3.2递归初始化,因为要初始化树,所以用递归115       this.InitRecursive(null);116       if (EtwTrace.IsTraceEnabled(5, 4))117       {118         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);119       }120       if (context.TraceIsEnabled)121       {122         this.Trace.Write("aspx.page", "End Init");123       }124       if (context.TraceIsEnabled)125       {126         this.Trace.Write("aspx.page", "Begin InitComplete");127       }128       //3.3,初始化完成129       this.OnInitComplete(EventArgs.Empty);130       if (context.TraceIsEnabled)131       {132         this.Trace.Write("aspx.page", "End InitComplete");133       }134       if (this.IsPostBack)135       {136         if (context.TraceIsEnabled)137         {138           this.Trace.Write("aspx.page", "Begin LoadState");139         }140         if (EtwTrace.IsTraceEnabled(5, 4))141         {142           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);143         }144         //4.1,加载ViewState145         this.LoadAllState();146         if (EtwTrace.IsTraceEnabled(5, 4))147         {148           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);149         }150         if (context.TraceIsEnabled)151         {152           this.Trace.Write("aspx.page", "End LoadState");153           this.Trace.Write("aspx.page", "Begin ProcessPostData");154         }155         if (EtwTrace.IsTraceEnabled(5, 4))156         {157           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);158         }159         //4.2,处理回发数据160         this.ProcessPostData(this._requestValueCollection, true);161         if (EtwTrace.IsTraceEnabled(5, 4))162         {163           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);164         }165         if (context.TraceIsEnabled)166         {167           this.Trace.Write("aspx.page", "End ProcessPostData");168         }169       }170       if (context.TraceIsEnabled)171       {172         this.Trace.Write("aspx.page", "Begin PreLoad");173       }174       //5.1页面预加载175       this.OnPreLoad(EventArgs.Empty);176       if (context.TraceIsEnabled)177       {178         this.Trace.Write("aspx.page", "End PreLoad");179       }180       if (context.TraceIsEnabled)181       {182         this.Trace.Write("aspx.page", "Begin Load");183       }184       if (EtwTrace.IsTraceEnabled(5, 4))185       {186         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);187       }188       //5.2页面递归加载189       this.LoadRecursive();190       if (EtwTrace.IsTraceEnabled(5, 4))191       {192         EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);193       }194       if (context.TraceIsEnabled)195       {196         this.Trace.Write("aspx.page", "End Load");197       }198       if (this.IsPostBack)199       {200         if (context.TraceIsEnabled)201         {202           this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");203         }204         //5.3第二次尝试加载回发数据205         this.ProcessPostData(this._leftoverPostData, false);206         if (context.TraceIsEnabled)207         {208           this.Trace.Write("aspx.page", "End ProcessPostData Second Try");209           this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");210         }211         if (EtwTrace.IsTraceEnabled(5, 4))212         {213           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);214         }215         //6.1,触发Change事件216         this.RaiseChangedEvents();217         if (EtwTrace.IsTraceEnabled(5, 4))218         {219           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);220         }221         if (context.TraceIsEnabled)222         {223           this.Trace.Write("aspx.page", "End Raise ChangedEvents");224           this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");225         }226         if (EtwTrace.IsTraceEnabled(5, 4))227         {228           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);229         }230         //6.2,触发点击事件231         this.RaisePostBackEvent(this._requestValueCollection);232         if (EtwTrace.IsTraceEnabled(5, 4))233         {234           EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);235         }236         if (context.TraceIsEnabled)237         {238           this.Trace.Write("aspx.page", "End Raise PostBackEvent");239         }240       }241       if (context.TraceIsEnabled)242       {243         this.Trace.Write("aspx.page", "Begin LoadComplete");244       }245       //5.3,页面加载完成246       this.OnLoadComplete(EventArgs.Empty);247       if (context.TraceIsEnabled)248       {249         this.Trace.Write("aspx.page", "End LoadComplete");250       }251       if (this.IsPostBack && this.IsCallback)252       {253         this.PrepareCallback(text2);254       }255       else256       {257         if (!this.IsCrossPagePostBack)258         {259           if (context.TraceIsEnabled)260           {261             this.Trace.Write("aspx.page", "Begin PreRender");262           }263           if (EtwTrace.IsTraceEnabled(5, 4))264           {265             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);266           }267           268           //7,递归预渲染269           this.PreRenderRecursiveInternal();270           if (EtwTrace.IsTraceEnabled(5, 4))271           {272             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);273           }274           if (context.TraceIsEnabled)275           {276             this.Trace.Write("aspx.page", "End PreRender");277           }278         }279       }280     }281     if (this._asyncInfo == null || this._asyncInfo.CallerIsBlocking)282     {283       this.ExecuteRegisteredAsyncTasks();284     }285     this._request.ValidateRawUrl();286     if (includeStagesAfterAsyncPoint)287     {288       if (this.IsCallback)289       {290         this.RenderCallback();291       }292       else293       {294         if (!this.IsCrossPagePostBack)295         {296           if (context.TraceIsEnabled)297           {298             this.Trace.Write("aspx.page", "Begin PreRenderComplete");299           }300           this.PerformPreRenderComplete();301           if (context.TraceIsEnabled)302           {303             this.Trace.Write("aspx.page", "End PreRenderComplete");304           }305           if (context.TraceIsEnabled)306           {307             this.BuildPageProfileTree(this.EnableViewState);308             this.Trace.Write("aspx.page", "Begin SaveState");309           }310           if (EtwTrace.IsTraceEnabled(5, 4))311           {312             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);313           }314           //8,保存页面状态到ViewState315           this.SaveAllState();316           if (EtwTrace.IsTraceEnabled(5, 4))317           {318             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);319           }320           if (context.TraceIsEnabled)321           {322             this.Trace.Write("aspx.page", "End SaveState");323             this.Trace.Write("aspx.page", "Begin SaveStateComplete");324           }325           this.OnSaveStateComplete(EventArgs.Empty);326           if (context.TraceIsEnabled)327           {328             this.Trace.Write("aspx.page", "End SaveStateComplete");329             this.Trace.Write("aspx.page", "Begin Render");330           }331           if (EtwTrace.IsTraceEnabled(5, 4))332           {333             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);334           }335           if (text != null)336           {337             this.ExportWebPart(text);338           }339           else340           {341             //9,渲染出HTML342             this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));343           }344           if (EtwTrace.IsTraceEnabled(5, 4))345           {346             EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);347           }348           if (context.TraceIsEnabled)349           {350             this.Trace.Write("aspx.page", "End Render");351           }352           this.CheckRemainingAsyncTasks(false);353         }354       }355     }356   }357   catch (ThreadAbortException ex2)358   {359     HttpApplication.CancelModuleException ex = ex2.ExceptionState as HttpApplication.CancelModuleException;360     if (!includeStagesBeforeAsyncPoint || !includeStagesAfterAsyncPoint || this._context.Handler != this || this._context.ApplicationInstance == null || ex == null || ex.Timeout)361     {362       this.CheckRemainingAsyncTasks(true);363       throw;364     }365     this._context.ApplicationInstance.CompleteRequest();366     Page.ThreadResetAbortWithAssert();367   }368   catch (ConfigurationException)369   {370     throw;371   }372   catch (Exception e)373   {374     PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);375     PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);376     if (!this.HandleError(e))377     {378       throw;379     }380   }381 }

View Code