您好,登錄后才能下訂單哦!
這篇文章主要介紹“ASP.NET頁面的生命周期詳解”,在日常操作中,相信很多人在ASP.NET頁面的生命周期詳解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET頁面的生命周期詳解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
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應用程序周期中PreRequestHandlerExecute事件與PostRequestHandlerExecute事件之間就是我們的頁面生命周期了,對于aspx頁面就是一系列的打造頁面控件樹,觸發各種頁面時間,對于一般處理程序ashx就是直接執行咱們開發者寫的ProcessRequest方法了,對于MVC應用程序就是創建控制器工廠,創建控制器對象,調用Action那一套了。
下面主要講述的就是ASP.NET WebForm中的頁面的生命周期了。
我們用反編譯工具查看Page類的ProcessRequest方法可以看見先調用了FrameworkInitialize; FrameworkInitialize里面就是打造了頁面控件樹,然后調用了ProcessRequestMain,就開始了執行整個頁面生命周期了(其實就是調用了一系列的事件方法)(可能部分圖看不見右邊,可在新標簽頁中打開圖片)
1.打造頁面控件樹
FrameworkInitialize內部調用了_buildControlTree()方法
上圖中左邊是前臺頁面的代碼,右邊是對應 生成的打造控件樹的代碼。中間截取的是生成表單那一部分的代碼。
下面看一張原理圖
瀏覽器的DOM樹是根據Html標簽生成一個C語言的DOM樹,而ASP.NET服務器端是用C#打造的一個控件樹,也是按照DOM結構打造的。本質是一樣。服務器端所有東西都加到頁面對象的控件集合中去了。標簽在服務器端有對應的控件對象的時候就用控件對象,沒有的時候就使用LiteralControl進行封裝。不管是服務器控件還是字符串標簽(沒有runat="server"的標簽)都以控件對象的方式存在前臺頁面類的控件集合里面。好處就是生成前臺頁面的html代碼的時候,只需要遍歷控件集合里面的每一個控件對象的RenderControl方法,每一個控件都會調用自己的Render方法生成對應的Html字符串。那么所有控件的生成的html字符串就還原成一個頁面的html代碼了。
2.觸發PerformPreInit事件
在所有初始化之前初始化了這個事件,這個事件主要是初始化了主題,初始化了母版頁
private void PerformPreInit() { this.OnPreInit(EventArgs.Empty); this.InitializeThemes(); this.ApplyMasterPage(); this._preInitWorkComplete = true; }
3.觸發InitRecursive事件
4.觸發LoadAllState()事件
加載頁面狀態解析ViewState,將頁面表單中的ViewState進行反Base64編碼,反序列化,存在頁面的ViewState屬性中
5.觸發ProcessPostData(this._requestValueCollection, true)事件
private void ProcessPostData(NameValueCollection postData, bool fBeforeLoad) { if (this._changedPostDataConsumers == null) { this._changedPostDataConsumers = new ArrayList(); } if (postData != null) { foreach (string str in postData) { if ((str != null) && !IsSystemPostField(str)) { Control control = this.FindControl(str); if (control == null) { if (fBeforeLoad) { if (this._leftoverPostData == null) { this._leftoverPostData = new NameValueCollection(); } this._leftoverPostData.Add(str, null); } } else { IPostBackDataHandler postBackDataHandler = control.PostBackDataHandler; if (postBackDataHandler == null) { if (control.PostBackEventHandler != null) { this.RegisterRequiresRaiseEvent(control.PostBackEventHandler); } } else { if (postBackDataHandler != null) { NameValueCollection postCollection = control.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection; if (postBackDataHandler.LoadPostData(str, postCollection)) { this._changedPostDataConsumers.Add(control); } } if (this._controlsRequiringPostBack != null) { this._controlsRequiringPostBack.Remove(str); } } } } } } ArrayList list = null; if (this._controlsRequiringPostBack != null) { foreach (string str2 in this._controlsRequiringPostBack) { Control control2 = this.FindControl(str2); if (control2 != null) { IPostBackDataHandler adapterInternal = control2.AdapterInternal as IPostBackDataHandler; if (adapterInternal == null) { adapterInternal = control2 as IPostBackDataHandler; } if (adapterInternal == null) { object[] args = new object[] { str2 }; throw new HttpException(SR.GetString("Postback_ctrl_not_found", args)); } NameValueCollection values2 = control2.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection; if (adapterInternal.LoadPostData(str2, values2)) { this._changedPostDataConsumers.Add(control2); } } else if (fBeforeLoad) { if (list == null) { list = new ArrayList(); } list.Add(str2); } } this._controlsRequiringPostBack = list; } }
主要做了兩件事
1)將表單里提交過來的控件數據設置給頁面對象的控件樹中對應控件的屬性(給前面打造的控件樹里面控件給值),這樣在服務器端就可以拿到客戶端輸入的值了。
2)將表單里面提交過來的值與ViewState中控件原來的值進行比對,不同則表示要觸發該控件的Change 事件,則同時將該控件放到一個集合(看源碼其實就是changedPostDataConsumers)中。在后續執行過程中遍歷改集合依次觸發對應控件的Change事件。
6.觸發LoadRecursive()事件
大名鼎鼎的Page_Load就是在這里執行的。不過是先執行頁面本身的Load事件再執行頁面控件的Load事件哦,這時候前面給控件賦的值,表單提交過來的數據,ViewState等等都可以使用了,IsPostBack的原理就是判斷是否有name為__VIEWSTATE的數據提交過來
7.再次觸發ProcessPostData(this._leftoverPostData, false)事件
這個事件我在網上看了很多人說是將第一次遺漏下來的,第一次執行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中手動創建的控件還原值。
8.觸發RaiseChangedEvents事件
循環遍歷changedPostDataConsumers集合中的所有控件,依次執行控件的非點擊回傳事件,比如文本框的改變事件等
9.觸發RaisePostBackEvent(this._requestValueCollection)事件
執行按鈕點擊回傳事件或者驗證事件,如果有多個按鈕,根據回發過來的按鈕的 name來判斷觸發哪個按鈕的事件,或者觸發該控件的驗證事件
10.觸發PerformPreRenderComplete事件
循環遍歷控件樹中所有的控件,根據每個控件生成對應的Html代碼,把服務器控件渲染成普通的html控件。
11.觸發事件SaveAllState事件
將服務器端ViewState集合中的內容(開發者自己加的數據或控件狀態信息等)序列化然后Base64編碼然后設置到客戶端隱藏域__ViewState中
12.RenderControl(this.CreateHtmlTextWriter(this.Response.Output))
把要發送到客戶端瀏覽器的內容設置到Response.Output,應用程序將它發送 到客戶端瀏覽器。[/code]
看到這里不知道大家是否已經可以清晰地回答開篇提到的幾個問題了,其實就是這些事件執行的先后順序,頁面生命周期了。”前人植樹,后人乘涼了"
最后附上生命周期ProcessRequest源碼
private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint) { try { HttpContext context = this.Context; string str = null; if (includeStagesBeforeAsyncPoint) { if (this.IsInAspCompatMode) { AspCompatApplicationStep.OnPageStartSessionObjects(); } if (this.PageAdapter != null) { this._requestValueCollection = this.PageAdapter.DeterminePostBackMode(); if (this._requestValueCollection != null) { this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated(); } } else { this._requestValueCollection = this.DeterminePostBackMode(); if (this._requestValueCollection != null) { this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated(); } } string callbackControlID = string.Empty; if (this.DetermineIsExportingWebPart()) { if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport) { throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler")); } str = this.Request.QueryString["webPart"]; if (string.IsNullOrEmpty(str)) { throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument")); } if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase)) { this._pageFlags.Set(4); } string str3 = this.Request.QueryString["query"]; if (str3 == null) { str3 = string.Empty; } this.Request.QueryStringText = str3; context.Trace.IsEnabled = false; } if (this._requestValueCollection != null) { if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null) { this.ContainsEncryptedViewState = true; } callbackControlID = this._requestValueCollection["__CALLBACKID"]; if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST)) { this._isCallback = true; } else if (!this.IsCrossPagePostBack) { VirtualPath path = null; if (this._requestValueCollection["__PREVIOUSPAGE"] != null) { try { path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID)); } catch { this._pageFlags[8] = true; } if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject)) { this._pageFlags[8] = true; this._previousPagePath = path; } } } } if (this.MaintainScrollPositionOnPostBack) { this.LoadScrollPosition(); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin PreInit"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest); } this.PerformPreInit(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest); } this.InitRecursive(null); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest); } this.LoadAllState(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest); } this.ProcessPostData(this._requestValueCollection, true); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } this.OnPreLoad(EventArgs.Empty); if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End PreLoad"); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin Load"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest); } this.LoadRecursive(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest); } this.RaiseChangedEvents(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest); } this.RaisePostBackEvent(this._requestValueCollection); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } this.OnLoadComplete(EventArgs.Empty); if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End LoadComplete"); } if (this.IsPostBack && this.IsCallback) { this.PrepareCallback(callbackControlID); } else if (!this.IsCrossPagePostBack) { if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin PreRender"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest); } this.PreRenderRecursiveInternal(); if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End PreRender"); } } } if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking) { this.ExecuteRegisteredAsyncTasks(); } this.ValidateRawUrlIfRequired(); 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest); } this.SaveAllState(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest); } if (str != null) { this.ExportWebPart(str); } else { this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output)); } if (EtwTrace.IsTraceEnabled(5, 4)) { 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 exception1) { HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException; if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout) { this._context.ApplicationInstance.CompleteRequest(); ThreadResetAbortWithAssert(); } else { this.CheckRemainingAsyncTasks(true); throw; } } catch (ConfigurationException) { throw; } catch (Exception exception2) { PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST); PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL); if (!this.HandleError(exception2)) { throw; } } } private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint) { try { HttpContext context = this.Context; string str = null; if (includeStagesBeforeAsyncPoint) { if (this.IsInAspCompatMode) { AspCompatApplicationStep.OnPageStartSessionObjects(); } if (this.PageAdapter != null) { this._requestValueCollection = this.PageAdapter.DeterminePostBackMode(); if (this._requestValueCollection != null) { this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated(); } } else { this._requestValueCollection = this.DeterminePostBackMode(); if (this._requestValueCollection != null) { this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated(); } } string callbackControlID = string.Empty; if (this.DetermineIsExportingWebPart()) { if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport) { throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler")); } str = this.Request.QueryString["webPart"]; if (string.IsNullOrEmpty(str)) { throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument")); } if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase)) { this._pageFlags.Set(4); } string str3 = this.Request.QueryString["query"]; if (str3 == null) { str3 = string.Empty; } this.Request.QueryStringText = str3; context.Trace.IsEnabled = false; } if (this._requestValueCollection != null) { if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null) { this.ContainsEncryptedViewState = true; } callbackControlID = this._requestValueCollection["__CALLBACKID"]; if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST)) { this._isCallback = true; } else if (!this.IsCrossPagePostBack) { VirtualPath path = null; if (this._requestValueCollection["__PREVIOUSPAGE"] != null) { try { path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID)); } catch { this._pageFlags[8] = true; } if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject)) { this._pageFlags[8] = true; this._previousPagePath = path; } } } } if (this.MaintainScrollPositionOnPostBack) { this.LoadScrollPosition(); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin PreInit"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest); } this.PerformPreInit(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest); } this.InitRecursive(null); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest); } this.LoadAllState(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest); } this.ProcessPostData(this._requestValueCollection, true); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } this.OnPreLoad(EventArgs.Empty); if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End PreLoad"); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin Load"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest); } this.LoadRecursive(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest); } this.RaiseChangedEvents(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest); } this.RaisePostBackEvent(this._requestValueCollection); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } this.OnLoadComplete(EventArgs.Empty); if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End LoadComplete"); } if (this.IsPostBack && this.IsCallback) { this.PrepareCallback(callbackControlID); } else if (!this.IsCrossPagePostBack) { if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "Begin PreRender"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest); } this.PreRenderRecursiveInternal(); if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest); } if (context.TraceIsEnabled) { this.Trace.Write("aspx.page", "End PreRender"); } } } if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking) { this.ExecuteRegisteredAsyncTasks(); } this.ValidateRawUrlIfRequired(); 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest); } this.SaveAllState(); if (EtwTrace.IsTraceEnabled(5, 4)) { 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"); } if (EtwTrace.IsTraceEnabled(5, 4)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest); } if (str != null) { this.ExportWebPart(str); } else { this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output)); } if (EtwTrace.IsTraceEnabled(5, 4)) { 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 exception1) { HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException; if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout) { this._context.ApplicationInstance.CompleteRequest(); ThreadResetAbortWithAssert(); } else { this.CheckRemainingAsyncTasks(true); throw; } } catch (ConfigurationException) { throw; } catch (Exception exception2) { PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST); PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL); if (!this.HandleError(exception2)) { throw; } } }
到此,關于“ASP.NET頁面的生命周期詳解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。