asp.net頁面運行時候,頁面將經歷一個生命周期,在生命周期中將執行一系列的處理步驟。包括初始化、實例化控件、還原和維護狀態、運行時間處理程序代碼以及進行呈現。熟悉頁面生命周期非常重要,這樣我們才能在生命周期的合適階段編寫代碼。如果我們能在寫代碼的時候想著我們現在是在做生命周期的哪一步那將是非常好的。
你可能會說我不清楚還不是一樣寫代碼,反正每次都在Page_load里面寫代碼 然后頁面就出來了我管那么多干什么。所謂知其然如果能知其所以然豈不是更吊?我個人認為做ASP.NET B/S開發只要咱們熟悉ASP.NET頁面生命周期,熟悉“請求-處理-響應“模式,對于一時半兒沒有觸及到的細節,等真正遇到那個點再去理解它也是毫不費力的。
在開始的時候我們先思考幾個問題,看看我們在描述完頁面生命周期的時候,能不能回答上這幾個問題
1.為什么在服務器端能通過this.textbox1.Text獲取到用戶提交過來的數據?
2.在Page_Load中Response.Write("hello")查看生成的html代碼原文件,hello在哪里?為什么?
3.有一個服務器端的按鈕,設置了點擊事件,該點擊事件什么時候執行?是先執行Page_Load事件還是先執行點擊事件?
4.為什么在服務器端通過this.textbox1.Text設置值后,客戶端就能顯示出來?
看過我上一篇博客【深入ASP.NET原理系列】--ASP.NET請求管道、應用程序生命周期、整體運行機制 童鞋可能知道,ASP.NET應用程序周期中PReRequestHandlerExecute事件與PostRequestHandlerExecute事件之間就是我們的頁面生命周期了,對于aspx頁面就是一系列的打造頁面控件樹,觸發各種頁面時間,對于一般處理程序ashx就是直接執行咱們開發者寫的ProcessRequest方法了,對于MVC應用程序就是創建控制器工廠,創建控制器對象,調用Action那一套了。
下面主要講述的就是ASP.NET WebForm中的頁面的生命周期了。
我們用反編譯工具查看Page類的ProcessRequest方法可以看見先調用了FrameworkInitialize; FrameworkInitialize里面就是打造了頁面控件樹,然后調用了ProcessRequestMain,就開始了執行整個頁面生命周期了(其實就是調用了一系列的事件方法)(可能部分圖看不見右邊,可在新標簽頁中打開圖片)
FrameworkInitialize內部調用了_buildControlTree()方法
上圖中左邊是前臺頁面的代碼,右邊是對應 生成的打造控件樹的代碼。中間截取的是生成表單那一部分的代碼。
下面看一張原理圖

瀏覽器的DOM樹是根據Html標簽生成一個C語言的DOM樹,而ASP.NET服務器端是用C#打造的一個控件樹,也是按照DOM結構打造的。本質是一樣。服務器端所有東西都加到頁面對象的控件集合中去了。標簽在服務器端有對應的控件對象的時候就用控件對象,沒有的時候就使用LiteralControl進行封裝。不管是服務器控件還是字符串標簽(沒有runat="server"的標簽)都以控件對象的方式存在前臺頁面類的控件集合里面。好處就是生成前臺頁面的html代碼的時候,只需要遍歷控件集合里面的每一個控件對象的RenderControl方法,每一個控件都會調用自己的Render方法生成對應的Html字符串。那么所有控件的生成的html字符串就還原成一個頁面的html代碼了?!?/span>
在所有初始化之前初始化了這個事件,這個事件主要是初始化了主題,初始化了母版頁
1 private void PerformPreInit() 2 3 { 4 5 this.OnPreInit(EventArgs.Empty); 6 7 this.InitializeThemes(); 8 9 this.ApplyMasterPage();10 11 this._preInitWorkComplete = true;12 13 }
加載頁面狀態解析ViewState,將頁面表單中的ViewState進行反Base64編碼,反序列化,存在頁面的ViewState屬性中
1 private void ProcessPostData(NameValueCollection postData, bool fBeforeLoad) 2 { 3 if (this._changedPostDataConsumers == null) 4 { 5 this._changedPostDataConsumers = new ArrayList(); 6 } 7 if (postData != null) 8 { 9 foreach (string str in postData)10 {11 if ((str != null) && !IsSystemPostField(str))12 {13 Control control = this.FindControl(str);14 if (control == null)15 {16 if (fBeforeLoad)17 {18 if (this._leftoverPostData == null)19 {20 this._leftoverPostData = new NameValueCollection();21 }22 this._leftoverPostData.Add(str, null);23 }24 }25 else26 {27 ipostBackDataHandler postBackDataHandler = control.PostBackDataHandler;28 if (postBackDataHandler == null)29 {30 if (control.PostBackEventHandler != null)31 {32 this.RegisterRequiresRaiseEvent(control.PostBackEventHandler);33 }34 }35 else36 {37 if (postBackDataHandler != null)38 {39 NameValueCollection postCollection = control.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection;40 if (postBackDataHandler.LoadPostData(str, postCollection))41 {42 this._changedPostDataConsumers.Add(control);43 }44 }45 if (this._controlsRequiringPostBack != null)46 {47 this._controlsRequiringPostBack.Remove(str);48 }49 }50 }51 }52 }53 }54 ArrayList list = null;55 if (this._controlsRequiringPostBack != null)56 {57 foreach (string str2 in this._controlsRequiringPostBack)58 {59 Control control2 = this.FindControl(str2);60 if (control2 != null)61 {62 IPostBackDataHandler adapterInternal = control2.AdapterInternal as IPostBackDataHandler;63 if (adapterInternal == null)64 {65 adapterInternal = control2 as IPostBackDataHandler;66 }67 if (adapterInternal == null)68 {69 object[] args = new object[] { str2 };70 throw new HttpException(SR.GetString("Postback_ctrl_not_found", args));71 }72 NameValueCollection values2 = control2.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection;73 if (adapterInternal.LoadPostData(str2, values2))74 {75 this._changedPostDataConsumers.Add(control2);76 }77 }78 else if (fBeforeLoad)79 {80 if (list == null)81 {82 list = new ArrayList();83 }84 list.Add(str2);85 }86 }87 this._controlsRequiringPostBack = list;88 }89 }90 91 92 93 94
主要做了兩件事
1)將表單里提交過來的控件數據設置給頁面對象的控件樹中對應控件的屬性(給前面打造的控件樹里面控件給值),這樣在服務器端就可以拿到客戶端輸入的值了。
2)將表單里面提交過來的值與ViewState中控件原來的值進行比對,不同則表示要觸發該控件的Change 事件,則同時將該控件放到一個集合(看源碼其實就是changedPostDataConsumers)中。在后續執行過程中遍歷改集合依次觸發對應控件的Change事件。
大名鼎鼎的Page_Load就是在這里執行的。不過是先執行頁面本身的Load事件再執行頁面控件的Load事件哦,這時候前面給控件賦的值,表單提交過來的數據,ViewState等等都可以使用了,IsPostBack的原理就是判斷是否有name為__VIEWSTATE的數據提交過來
這個事件我在網上看了很多人說是將第一次遺漏下來的,第一次執行ProcessPostData沒有涉及到的控件進行處理,但是并沒有說明哪些遺漏下來了。為什么第一次沒處理了? 最后Google查到是處理我們開發者在頁面的Page_Load方法中添加的控件。在Page_Load中我們可以自己創建控件對象加到頁面對應的“C#DOM樹中“,如:在Page_Load中寫
TextBox txt = new TextBox();txt.ID ="myTxtBox";this.form1.Controls.Add(txt);
這就是把開發者自己創建的控件加在頁面的form1的表單中。當然你也可以加上Change事件了創建控件的時候。執行的還是上面那兩件事了。則回發的時候可以給開發者在Page_Lod中手動創建的控件還原值。
循環遍歷changedPostDataConsumers集合中的所有控件,依次執行控件的非點擊回傳事件,比如文本框的改變事件等
執行按鈕點擊回傳事件或者驗證事件,如果有多個按鈕,根據回發過來的按鈕的 name來判斷觸發哪個按鈕的事件,或者觸發該控件的驗證事件
循環遍歷控件樹中所有的控件,根據每個控件生成對應的Html代碼,把服務器控件渲染成普通的html控件。
將服務器端ViewState集合中的內容(開發者自己加的數據或控件狀態信息等)序列化然后Base64編碼然后設置到客戶端隱藏域__ViewState中
把要發送到客戶端瀏覽器的內容設置到Response.Output,應用程序將它發送 到客戶端瀏覽器。
看到這里不知道大家是否已經可以清晰地回答開篇提到的幾個問題了,其實就是這些事件執行的先后順序,頁面生命周期了。”前人植樹,后人乘涼了"
最后附上生命周期ProcessRequest源碼
1 private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint) 2 { 3 try 4 { 5 HttpContext context = this.Context; 6 string str = null; 7 if (includeStagesBeforeAsyncPoint) 8 { 9 if (this.IsInAspCompatMode) 10 { 11 AspCompatapplicationStep.OnPageStartsessionObjects(); 12 } 13 if (this.PageAdapter != null) 14 { 15 this._requestValueCollection = this.PageAdapter.DeterminePostBackMode(); 16 if (this._requestValueCollection != null) 17 { 18 this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated(); 19 } 20 } 21 else 22 { 23 this._requestValueCollection = this.DeterminePostBackMode(); 24 if (this._requestValueCollection != null) 25 { 26 this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated(); 27 } 28 } 29 string callbackControlID = string.Empty; 30 if (this.DetermineIsExportingWebPart()) 31 { 32 if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport) 33 { 34 throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler")); 35 } 36 str = this.Request.QueryString["webPart"]; 37 if (string.IsNullOrEmpty(str)) 38 { 39 throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument")); 40 } 41 if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase)) 42 { 43 this._pageFlags.Set(4); 44 } 45 string str3 = this.Request.QueryString["query"]; 46 if (str3 == null) 47 { 48 str3 = string.Empty; 49 } 50 this.Request.QueryStringText = str3; 51 context.Trace.IsEnabled = false; 52 } 53 if (this._requestValueCollection != null) 54 { 55 if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null) 56 { 57 this.ContainsEncryptedViewState = true; 58 } 59 callbackControlID = this._requestValueCollection["__CALLBACKID"]; 60 if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST)) 61 { 62 this._isCallback = true; 63 } 64 else if (!this.IsCrossPagePostBack) 65 { 66 VirtualPath path = null; 67 if (this._requestValueCollection["__PREVIOUSPAGE"] != null) 68 { 69 try 70 { 71 path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID)); 72 } 73 catch 74 { 75 this._pageFlags[8] = true; 76 } 77 if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject)) 78 { 79 this._pageFlags[8] = true; 80 this._previousPagePath = path; 81 } 82 } 83 } 84 } 85 if (this.MaintainScrollPositionOnPostBack) 86 { 87 this.LoadScrollPosition(); 88 } 89 if (context.TraceIsEnabled) 90 { 91 this.Trace.Write("aspx.page", "Begin PreInit"); 92 } 93 if (EtwTrace.IsTraceEnabled(5, 4)) 94 { 95 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest); 96 } 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 this.InitRecursive(null);115 if (EtwTrace.IsTraceEnabled(5, 4))116 {117 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);118 }119 if (context.TraceIsEnabled)120 {121 this.Trace.Write("aspx.page", "End Init");122 }123 if (context.TraceIsEnabled)124 {125 this.Trace.Write("aspx.page", "Begin InitComplete");126 }127 this.OnInitComplete(EventArgs.Empty);128 if (context.TraceIsEnabled)129 {130 this.Trace.Write("aspx.page", "End InitComplete");131 }132 if (this.IsPostBack)133 {134 if (context.TraceIsEnabled)135 {136 this.Trace.Write("aspx.page", "Begin LoadState");137 }138 if (EtwTrace.IsTraceEnabled(5, 4))139 {140 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);141 }142 this.LoadAllState();143 if (EtwTrace.IsTraceEnabled(5, 4))144 {145 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);146 }147 if (context.TraceIsEnabled)148 {149 this.Trace.Write("aspx.page", "End LoadState");150 this.Trace.Write("aspx.page", "Begin ProcessPostData");151 }152 if (EtwTrace.IsTraceEnabled(5, 4))153 {154 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);155 }156 this.ProcessPostData(this._requestValueCollection, true);157 if (EtwTrace.IsTraceEnabled(5, 4))158 {159 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);160 }161 if (context.TraceIsEnabled)162 {163 this.Trace.Write("aspx.page", "End ProcessPostData");164 }165 }166 if (context.TraceIsEnabled)167 {168 this.Trace.Write("aspx.page", "Begin PreLoad");169 }170 this.OnPreLoad(EventArgs.Empty);171 if (context.TraceIsEnabled)172 {173 this.Trace.Write("aspx.page", "End PreLoad");174 }175 if (context.TraceIsEnabled)176 {177 this.Trace.Write("aspx.page", "Begin Load");178 }179 if (EtwTrace.IsTraceEnabled(5, 4))180 {181 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);182 }183 this.LoadRecursive();184 if (EtwTrace.IsTraceEnabled(5, 4))185 {186 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);187 }188 if (context.TraceIsEnabled)189 {190 this.Trace.Write("aspx.page", "End Load");191 }192 if (this.IsPostBack)193 {194 if (context.TraceIsEnabled)195 {196 this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");197 }198 this.ProcessPostData(this._leftoverPostData, false);199 if (context.TraceIsEnabled)200 {201 this.Trace.Write("aspx.page", "End ProcessPostData Second Try");202 this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");203 }204 if (EtwTrace.IsTraceEnabled(5, 4))205 {206 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);207 }208 this.RaiseChangedEvents();209 if (EtwTrace.IsTraceEnabled(5, 4))210 {211 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);212 }213 if (context.TraceIsEnabled)214 {215 this.Trace.Write("aspx.page", "End Raise ChangedEvents");216 this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");217 }218 if (EtwTrace.IsTraceEnabled(5, 4))219 {220 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);221 }222 this.RaisePostBackEvent(this._requestValueCollection);223 if (EtwTrace.IsTraceEnabled(5, 4))224 {225 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);226 }227 if (context.TraceIsEnabled)228 {229 this.Trace.Write("aspx.page", "End Raise PostBackEvent");230 }231 }232 if (context.TraceIsEnabled)233 {234 this.Trace.Write("aspx.page", "Begin LoadComplete");235 }236 this.OnLoadComplete(EventArgs.Empty);237 if (context.TraceIsEnabled)238 {239 this.Trace.Write("aspx.page", "End LoadComplete");240 }241 if (this.IsPostBack && this.IsCallback)242 {243 this.PrepareCallback(callbackControlID);244 }245 else if (!this.IsCrossPagePostBack)246 {247 if (context.TraceIsEnabled)248 {249 this.Trace.Write("aspx.page", "Begin PreRender");250 }251 if (EtwTrace.IsTraceEnabled(5, 4))252 {253 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);254 }255 this.PreRenderRecursiveInternal();256 if (EtwTrace.IsTraceEnabled(5, 4))257 {258 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);259 }260 if (context.TraceIsEnabled)261 {262 this.Trace.Write("aspx.page", "End PreRender");263 }264 }265 }266 if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking)267 {268 this.ExecuteRegisteredAsyncTasks();269 }270 this.ValidateRawUrlIfRequired();271 if (includeStagesAfterAsyncPoint)272 {273 if (this.IsCallback)274 {275 this.RenderCallback();276 }277 else if (!this.IsCrossPagePostBack)278 {279 if (context.TraceIsEnabled)280 {281 this.Trace.Write("aspx.page", "Begin PreRenderComplete");282 }283 this.PerformPreRenderComplete();284 if (context.TraceIsEnabled)285 {286 this.Trace.Write("aspx.page", "End PreRenderComplete");287 }288 if (context.TraceIsEnabled)289 {290 this.BuildPageProfileTree(this.EnableViewState);291 this.Trace.Write("aspx.page", "Begin SaveState");292 }293 if (EtwTrace.IsTraceEnabled(5, 4))294 {295 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);296 }297 this.SaveAllState();298 if (EtwTrace.IsTraceEnabled(5, 4))299 {300 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);301 }302 if (context.TraceIsEnabled)303 {304 this.Trace.Write("aspx.page", "End SaveState");305 this.Trace.Write("aspx.page", "Begin SaveStateComplete");306 }307 this.OnSaveStateComplete(EventArgs.Empty);308 if (context.TraceIsEnabled)309 {310 this.Trace.Write("aspx.page", "End SaveStateComplete");311 this.Trace.Write("aspx.page", "Begin Render");312 }313 if (EtwTrace.IsTraceEnabled(5, 4))314 {315 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);316 }317 if (str != null)318 {319 this.ExportWebPart(str);320 }321 else322 {323 this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));324 }325 if (EtwTrace.IsTraceEnabled(5, 4))326 {327 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);328 }329 if (context.TraceIsEnabled)330 {331 this.Trace.Write("aspx.page", "End Render");332 }333 this.CheckRemainingAsyncTasks(false);334 }335 }336 }337 catch (ThreadAbortException exception1)338 {339 HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException;340 if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout)341 {342 this._context.ApplicationInstance.CompleteRequest();343 ThreadResetAbortWithAssert();344 }345 else346 {347 this.CheckRemainingAsyncTasks(true);348 throw;349 }350 }351 catch (ConfigurationException)352 {353 throw;354 }355 catch (Exception exception2)356 {357 PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);358 PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);359 if (!this.HandleError(exception2))360 {361 throw;362 }363 }364 }365 366 367 368 369 private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)370 {371 try372 {373 HttpContext context = this.Context;374 string str = null;375 if (includeStagesBeforeAsyncPoint)376 {377 if (this.IsInAspCompatMode)378 {379 AspCompatApplicationStep.OnPageStartSessionObjects();380 }381 if (this.PageAdapter != null)382 {383 this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();384 if (this._requestValueCollection != null)385 {386 this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated();387 }388 }389 else390 {391 this._requestValueCollection = this.DeterminePostBackMode();392 if (this._requestValueCollection != null)393 {394 this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated();395 }396 }397 string callbackControlID = string.Empty;398 if (this.DetermineIsExportingWebPart())399 {400 if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)401 {402 throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));403 }404 str = this.Request.QueryString["webPart"];405 if (string.IsNullOrEmpty(str))406 {407 throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));408 }409 if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase))410 {411 this._pageFlags.Set(4);412 }413 string str3 = this.Request.QueryString["query"];414 if (str3 == null)415 {416 str3 = string.Empty;417 }418 this.Request.QueryStringText = str3;419 context.Trace.IsEnabled = false;420 }421 if (this._requestValueCollection != null)422 {423 if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null)424 {425 this.ContainsEncryptedViewState = true;426 }427 callbackControlID = this._requestValueCollection["__CALLBACKID"];428 if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST))429 {430 this._isCallback = true;431 }432 else if (!this.IsCrossPagePostBack)433 {434 VirtualPath path = null;435 if (this._requestValueCollection["__PREVIOUSPAGE"] != null)436 {437 try438 {439 path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID));440 }441 catch442 {443 this._pageFlags[8] = true;444 }445 if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject))446 {447 this._pageFlags[8] = true;448 this._previousPagePath = path;449 }450 }451 }452 }453 if (this.MaintainScrollPositionOnPostBack)454 {455 this.LoadScrollPosition();456 }457 if (context.TraceIsEnabled)458 {459 this.Trace.Write("aspx.page", "Begin PreInit");460 }461 if (EtwTrace.IsTraceEnabled(5, 4))462 {463 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest);464 }465 this.PerformPreInit();466 if (EtwTrace.IsTraceEnabled(5, 4))467 {468 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);469 }470 if (context.TraceIsEnabled)471 {472 this.Trace.Write("aspx.page", "End PreInit");473 }474 if (context.TraceIsEnabled)475 {476 this.Trace.Write("aspx.page", "Begin Init");477 }478 if (EtwTrace.IsTraceEnabled(5, 4))479 {480 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);481 }482 this.InitRecursive(null);483 if (EtwTrace.IsTraceEnabled(5, 4))484 {485 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);486 }487 if (context.TraceIsEnabled)488 {489 this.Trace.Write("aspx.page", "End Init");490 }491 if (context.TraceIsEnabled)492 {493 this.Trace.Write("aspx.page", "Begin InitComplete");494 }495 this.OnInitComplete(EventArgs.Empty);496 if (context.TraceIsEnabled)497 {498 this.Trace.Write("aspx.page", "End InitComplete");499 }500 if (this.IsPostBack)501 {502 if (context.TraceIsEnabled)503 {504 this.Trace.Write("aspx.page", "Begin LoadState");505 }506 if (EtwTrace.IsTraceEnabled(5, 4))507 {508 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);509 }510 this.LoadAllState();511 if (EtwTrace.IsTraceEnabled(5, 4))512 {513 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);514 }515 if (context.TraceIsEnabled)516 {517 this.Trace.Write("aspx.page", "End LoadState");518 this.Trace.Write("aspx.page", "Begin ProcessPostData");519 }520 if (EtwTrace.IsTraceEnabled(5, 4))521 {522 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);523 }524 this.ProcessPostData(this._requestValueCollection, true);525 if (EtwTrace.IsTraceEnabled(5, 4))526 {527 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);528 }529 if (context.TraceIsEnabled)530 {531 this.Trace.Write("aspx.page", "End ProcessPostData");532 }533 }534 if (context.TraceIsEnabled)535 {536 this.Trace.Write("aspx.page", "Begin PreLoad");537 }538 this.OnPreLoad(EventArgs.Empty);539 if (context.TraceIsEnabled)540 {541 this.Trace.Write("aspx.page", "End PreLoad");542 }543 if (context.TraceIsEnabled)544 {545 this.Trace.Write("aspx.page", "Begin Load");546 }547 if (EtwTrace.IsTraceEnabled(5, 4))548 {549 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);550 }551 this.LoadRecursive();552 if (EtwTrace.IsTraceEnabled(5, 4))553 {554 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);555 }556 if (context.TraceIsEnabled)557 {558 this.Trace.Write("aspx.page", "End Load");559 }560 if (this.IsPostBack)561 {562 if (context.TraceIsEnabled)563 {564 this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");565 }566 this.ProcessPostData(this._leftoverPostData, false);567 if (context.TraceIsEnabled)568 {569 this.Trace.Write("aspx.page", "End ProcessPostData Second Try");570 this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");571 }572 if (EtwTrace.IsTraceEnabled(5, 4))573 {574 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);575 }576 this.RaiseChangedEvents();577 if (EtwTrace.IsTraceEnabled(5, 4))578 {579 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);580 }581 if (context.TraceIsEnabled)582 {583 this.Trace.Write("aspx.page", "End Raise ChangedEvents");584 this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");585 }586 if (EtwTrace.IsTraceEnabled(5, 4))587 {588 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);589 }590 this.RaisePostBackEvent(this._requestValueCollection);591 if (EtwTrace.IsTraceEnabled(5, 4))592 {593 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);594 }595 if (context.TraceIsEnabled)596 {597 this.Trace.Write("aspx.page", "End Raise PostBackEvent");598 }599 }600 if (context.TraceIsEnabled)601 {602 this.Trace.Write("aspx.page", "Begin LoadComplete");603 }604 this.OnLoadComplete(EventArgs.Empty);605 if (context.TraceIsEnabled)606 {607 this.Trace.Write("aspx.page", "End LoadComplete");608 }609 if (this.IsPostBack && this.IsCallback)610 {611 this.PrepareCallback(callbackControlID);612 }613 else if (!this.IsCrossPagePostBack)614 {615 if (context.TraceIsEnabled)616 {617 this.Trace.Write("aspx.page", "Begin PreRender");618 }619 if (EtwTrace.IsTraceEnabled(5, 4))620 {621 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);622 }623 this.PreRenderRecursiveInternal();624 if (EtwTrace.IsTraceEnabled(5, 4))625 {626 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);627 }628 if (context.TraceIsEnabled)629 {630 this.Trace.Write("aspx.page", "End PreRender");631 }632 }633 }634 if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking)635 {636 this.ExecuteRegisteredAsyncTasks();637 }638 this.ValidateRawUrlIfRequired();639 if (includeStagesAfterAsyncPoint)640 {641 if (this.IsCallback)642 {643 this.RenderCallback();644 }645 else if (!this.IsCrossPagePostBack)646 {647 if (context.TraceIsEnabled)648 {649 this.Trace.Write("aspx.page", "Begin PreRenderComplete");650 }651 this.PerformPreRenderComplete();652 if (context.TraceIsEnabled)653 {654 this.Trace.Write("aspx.page", "End PreRenderComplete");655 }656 if (context.TraceIsEnabled)657 {658 this.BuildPageProfileTree(this.EnableViewState);659 this.Trace.Write("aspx.page", "Begin SaveState");660 }661 if (EtwTrace.IsTraceEnabled(5, 4))662 {663 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);664 }665 this.SaveAllState();666 if (EtwTrace.IsTraceEnabled(5, 4))667 {668 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);669 }670 if (context.TraceIsEnabled)671 {672 this.Trace.Write("aspx.page", "End SaveState");673 this.Trace.Write("aspx.page", "Begin SaveStateComplete");674 }675 this.OnSaveStateComplete(EventArgs.Empty);676 if (context.TraceIsEnabled)677 {678 this.Trace.Write("aspx.page", "End SaveStateComplete");679 this.Trace.Write("aspx.page", "Begin Render");680 }681 if (EtwTrace.IsTraceEnabled(5, 4))682 {683 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);684 }685 if (str != null)686 {687 this.ExportWebPart(str);688 }689 else690 {691 this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));692 }693 if (EtwTrace.IsTraceEnabled(5, 4))694 {695 EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);696 }697 if (context.TraceIsEnabled)698 {699 this.Trace.Write("aspx.page", "End Render");700 }701 this.CheckRemainingAsyncTasks(false);702 }703 }704 }705 catch (ThreadAbortException exception1)706 {707 HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException;708 if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout)709 {710 this._context.ApplicationInstance.CompleteRequest();711 ThreadResetAbortWithAssert();712 }713 else714 {715 this.CheckRemainingAsyncTasks(true);716 throw;717 }718 }719 catch (ConfigurationException)720 {721 throw;722 }723 catch (Exception exception2)724 {725 PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);726 PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);727 if (!this.HandleError(exception2))728 {729 throw;730 }731 }732 }733 734
如果覺得本文對你有所幫助不妨點一下【推薦】! 如果文中有不妥或者錯誤的地方還望指出,以免誤人子弟。
作者:張一輝
出處:http://www.49028c.com/zhangyihui/
本文以學習、研究和分享為主,版權歸作者和博客園共有,歡迎轉載,但必須在文章頁面明顯位置給出此段申明。
新聞熱點
疑難解答