<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET Web頁生命周期和執行的方法介紹

        來源:懂視網 責編:小采 時間:2020-11-27 22:42:20
        文檔

        ASP.NET Web頁生命周期和執行的方法介紹

        ASP.NET Web頁生命周期和執行的方法介紹:以上所列的階段中有些在頁面級是不可見的,并且僅對服務器控件的編寫者和要創建從 Page 導出的類的開發人員有意義。Init、Load、PreRender、Unload,再加上由嵌入式控件定義的所有回發事件,就構成了向外發送頁面的各個階段標記。 執行的各個階段 頁面生命
        推薦度:
        導讀ASP.NET Web頁生命周期和執行的方法介紹:以上所列的階段中有些在頁面級是不可見的,并且僅對服務器控件的編寫者和要創建從 Page 導出的類的開發人員有意義。Init、Load、PreRender、Unload,再加上由嵌入式控件定義的所有回發事件,就構成了向外發送頁面的各個階段標記。 執行的各個階段 頁面生命


        以上所列的階段中有些在頁面級是不可見的,并且僅對服務器控件的編寫者和要創建從 Page 導出的類的開發人員有意義。Init、Load、PreRender、Unload,再加上由嵌入式控件定義的所有回發事件,就構成了向外發送頁面的各個階段標記。

        執行的各個階段

        頁面生命周期中的第一個階段是初始化。這個階段的標志是 Init 事件。在成功創建頁面的控件樹后,將對應用程序觸發此事件。換句話說,當 Init 事件發生時,.aspx 源文件中靜態聲明的所有控件都已實例化并采用各自的默認值。控件可以截取 Init 事件以初始化在傳入的 Web 請求的生命周期內所需的所有設置。例如,這時控件可以加載外部模板文件或設置事件的處理程序。請注意,這時視圖狀態信息尚不可用。

        初始化之后,頁面框架將加載頁面的視圖狀態。視圖狀態是名稱/值對的集合,在此集合中,控件和頁面本身存儲了對所有 Web 請求都必須始終有效的全部信息。視圖狀態代表了頁面的調用上下文。通常,它包含上次在服務器上處理頁面時控件的狀態。首次在會話中請求頁面時,視圖狀態為空。默認情況下,視圖狀態存儲在靜默添加到頁面的隱藏字段中,該字段的名稱是 __VIEWSTATE。通過覆蓋 LoadViewState 方法(Control 類的受保護、可覆蓋方法),組件開發人員可以控制視圖狀態的存儲方式以及視圖狀態的內容映射到內部狀態的方式。

        有些方法(如 LoadPageStateFromPersistenceMedium 以及其對應的 SavePageStateToPersistenceMedium),可以用來將視圖狀態加載并保存到其他存儲介質(例如會話、數據庫或服務器端文件)中。與 LoadViewState 不同,上述方法只能在從 Page 導出的類中使用。

        存儲視圖狀態之后,頁面樹中控件的狀態與頁面最后一次顯示在瀏覽器中的狀態相同。下一步是更新它們的狀態以加入客戶端的更改。處理回發數據階段使控件有機會更新其狀態,從而準確反映客戶端相應的 HTML 元素的狀態。例如,服務器的 TextBox 控件對應的 HTML 元素是 <input type=text>。在回發數據階段,TextBox 控件將檢索 <input> 標記的當前值,并使用該值來刷新自己內部的狀態。每個控件都要從回發的數據中提取值并更新自己的部分屬性。TextBox 控件將更新它的 Text 屬性,而 CheckBox 控件將刷新它的 Checked 屬性。服務器控件和 HTML 元素的對應關系可以通過二者的 ID 找到。

        在處理回發數據階段的最后,頁面中的所有控件的狀態都將使用客戶端輸入的更改來更新前一狀態。這時,將對頁面觸發 Load 事件。

        頁面中可能會有一些控件,當其某個敏感屬性在兩個不同的請求中被修改時,需要完成特定的任務。例如,如果 TextBox 控件的文本在客戶端被修改,則此控件將觸發 TextChanged 事件。每個控件在其一個或多個屬性被修改為客戶端輸入的值時都可以決定觸發相應的事件。對于這些更改對其非常關鍵的控件,控件實現 IPostBackDataHandler 接口,此接口的 LoadPostData 方法是在 Load 事件后立即調用的。通過對 LoadPostData 方法進行編碼,控件將驗證自上次請求后是否發生了關鍵更改,并觸發自己的更改事件。

        頁面生命周期中的關鍵事件是被調用以執行服務器端代碼的事件,此代碼與客戶端觸發的事件相關聯。當用戶單擊按鈕時,將回發頁面?;匕l值的集合中包括啟動整個操作的按鈕的 ID。如果控件實現 IPostBackEventHandler 接口(如按鈕和鏈接按鈕),頁面框架將調用 RaisePostBackEvent 方法。此方法的行為取決于控件的類型。就按鈕和鏈接按鈕而言,此方法將查找 Click 事件處理程序并運行相關的委托。

        處理完回發事件之后,頁面就可以顯示了。這個階段的標志是 PreRender 事件??丶梢岳眠@段時間來執行那些需要在保存視圖狀態和顯示輸出的前一刻執行的更新操作。下一個狀態是 SaveViewState,在此狀態中,所有控件和頁面本身都將更新自己 ViewState 集合的內容。然后,將得到序列化、散列、Base64 編碼的視圖狀態,而且此視圖狀態與隱藏字段 __VIEWSTATE 相關聯。

        通過覆蓋 Render 方法可以改變各個控件的顯示機制。此方法接受 HTML 書寫器對象,并使用此對象來積累所有要為控件生成的 HTML 文本。Page 類的 Render 方法的默認實現包括對所有成員控件的遞歸調用。對于每個控件,頁面都將調用 Render 方法,并緩存 HTML 輸出。

        頁面生命中的最后一個標志是 Unload 事件,在頁面對象消除之前發生。在此事件中,您應該釋放所有可能占用的關鍵資源(例如文件、圖形對象、數據庫連接等)。

        在此事件之后,也就是最后,瀏覽器接收 HTTP 響應數據包并顯示頁面。

        asp.net web生命周期

        Asp.net相對以前的asp有了很大的發展.引用許多新的機制.本文是關于一個asp.net web生命周期的一個初步介紹.
              當一個獲取網頁的請求(有可能是通過用戶提交,或者是通過用戶點擊鏈接完成)被提交到服務器后.緊接著這個web頁面就開始運行從創建到處理完成的一系列事件.在我們建立asp.net頁面的時候,這個過程我們是不必去考慮的.然而,如果被正確的操縱,一個頁面的執行周期將是一道有效而且功能強大的工具。許多開發者在編寫Asp.net的頁面以及用戶控件的時候發現,如果知道整個過程中發生了什么以及在什么時候發生將對完成整個任務起到很重要的幫助作用。下面我就向大家介紹一下一個Asp.net頁面從創建到處理完成過程中的十個事件。同時,也向大家展示如何在這些事件中添加自己的代碼以達到預定的效果。
               一、初始化對象
               一個頁面的控件(以及頁面本身)最初應被正確的初始化。通過在你的C#文件的構造函數中聲名所有對象,頁面就知道要創建多少對象以及它們的類型。一旦你在你的構造函數中聲名了所有的對象,你就可以通過繼承類、方法、事件或是屬性訪問它們。然而,如果你的一些對象是在Aspx文件中指定的一些控件,那么這些控件就沒有屬性可言了。同時,通過代碼訪問它們會產生一些意外的錯誤,因為這些控件實例是沒有一個確定的創建順序的(如果它們是被一起創建的)。還有,你可以通過OnInit來重載初始化事件.
              二、導入Viewstate數據
              在初始化事件后,所有控件只可以通過它們的ID被引用訪問(因為還沒有相應的DOM可使用)。在LoadViewState這個事件中,所有的控件將獲得它們的第一個屬性:Viewstate屬性。這個屬性最終將被返回給服務器以判斷這個頁面是已經被用戶訪問完畢還是仍然在被用戶所訪問。Viewstate屬性以“名稱/值”對的字符串方式被保存,它包含了控件的文本以及值等信息。該屬性被存儲在一個隱藏的<input type="hidden" />控件的值屬性里,在請求頁面的時候被傳遞。還可以重載LoadViewState事件函數來對相應的控件進行值設定.如圖:
        聯單 


               三、用LoadPostData處理Postback數據
               在頁面創建的這個階段,服務器對頁面上的控件提交的表單數據(在Asp.net中稱postback數據)進行處理。當一個頁面提交一個表單時,框架就在每個提交了數據的控件上執行一個IPostBackDataHandler接口操作。然后頁面執行LoadPostData事件,解析頁面,找到每個執行了IpostBackDataHandler接口操作的控件,并用恰當的postback數據更新這些控件狀態。Asp.net是通過用NameValue集中的“名稱/值”對和每個控件的唯一的ID匹配來實現這一操作的。所以,在Asp.net的頁面上每個控件必須有一個唯一的ID,不可以出現幾個控件共有ID的情況。即使是用戶自定義的一些控件,框架也會賦予它們各自唯一的ID的。在LoadPostData事件后,就要執行下面的RaisePostDataChanged事件了。
               四、導入對象
               在Load事件中,對象都實例化了。所有的對象第一次被布置在DOM頁面(在Asp.net中稱控件樹)里了并且可以通過代碼或是相關的位置被引用。這樣,對象就可以很容易的從客戶端獲得諸如寬度、高度、值、可見性等在Html中的屬性值。在Load事件中,當然還有像設置控件屬性等操作的發生。這個過程是整個生命周期中最重要、最主要的,你可以通過調用OnLoad來重載Load事件。如圖:
                五、RaisePostBackChanged事件
                就像在上面提到的那樣,這個事件是發生在所有的控件執行了IPostBackDataHandler接口操作并被正確的postback數據更新后的。在這個過程中,每個控件都被賦予一個布爾值來標志該控件有沒有被更新。然后,Asp.net就在整個頁面上尋找任何已被更新過的控件并執行RaisePostDataChanged事件操作。不過,這個事件是要在所有的控件都被更新了以及Load事件完成后才進行的。這樣就保證了一個控件在被postback數據更新前,別的控件在RaisePostDataChanged事件中是不會被手動改變的。
                六、處理客戶端PostBack事件
                當由postback數據在服務器端引起的事件都完成后,產生postback數據的對象就執行RaisePostBackEvent事件操作。可是會有這種情況,由于一個控件狀態的改變使得它將表單返回給服務器或是用戶點擊了提交按鈕使得表單返回給服務器。在這種情況下應該有相應的處理代碼來體現事件驅動這一面向對象(OOP)編程原則。由于要滿足呈現給瀏覽器的數據的精確性要求,在一系列postback事件中RaisePostBackEvent事件是最后發生的。在postback過程中改變的控件不應在執行功能函數被調用后更新。也就是說,任何由于一個預期的事件而改變的數據應該在最終的頁面上被反映出來。你可以通過修改RaisePostBackEvent函數來滿足你的要求.
                七、預先呈遞對象
                 可以改變對象并將改變保存的最后時刻就是這一步――預先呈遞對象。這樣,你可以在這一步對控件的屬性、控件樹結構等作出最后的修改。同時還不用考慮Asp.net對其作出任何改變,因為此時已經脫離了數據庫調用以及viewstate更新了。在這一步之后,對對象的所有修改將最終被確定,不能被保存到頁面的viewstate中了。你可以通過OnPreRender來重載這一步。
                  八、保存ViewState
                 所有對頁面控件的修改完成后viewstate就被保存了。對像的狀態數據還是保留在隱藏的<input type="hidden" />控件里面,呈現給Html的對象狀態數據也是從這里取得的。在SaveViewState事件中,其值能被保存到viewstate對象,然而這時在頁面上控件的修改卻不能了。你可以用SaveViewState來重載這一步.如圖:

                九、呈遞給HTML
                運用Html創建給瀏覽器輸出的頁面的時候Render事件就發生了。在Render事件過程中,頁面調用其中的對象將它們呈遞給Html。然后,頁面就可以以Html的形式被用戶的瀏覽器訪問了。當Render事件被重載時,開發者可以編寫自定義的Html代碼使得原先生成的Html都無效而按照新的Html來組織頁面。Render方法將一個HtmlTextWriter對象作為參數并用它將Html在瀏覽器上以網頁的形式顯示。這時仍然可以做一些修改動作,不過它們只是客戶端的一些變化而已了。你可以重載Render事件.如圖:

               十、銷毀對象
               在呈遞給Html完成后,所有的對象都應被銷毀。在Dispose事件中,你應該銷毀所有在建立這個頁面時創建的對象。這時,所有的處理已經完畢,所以銷毀任何剩下的對象都是不會產生錯誤的,包括頁面對象。你可以重載Dispose事件.
              全文總結:
             

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ASP.NET Web頁生命周期和執行的方法介紹

        ASP.NET Web頁生命周期和執行的方法介紹:以上所列的階段中有些在頁面級是不可見的,并且僅對服務器控件的編寫者和要創建從 Page 導出的類的開發人員有意義。Init、Load、PreRender、Unload,再加上由嵌入式控件定義的所有回發事件,就構成了向外發送頁面的各個階段標記。 執行的各個階段 頁面生命
        推薦度:
        標簽: 方法 net 執行
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线观看人成视频免费| 久久久久免费看黄A片APP| 亚洲第一区精品观看| 亚洲成a∨人片在无码2023| 青苹果乐园免费高清在线| 亚洲va精品中文字幕| 国产乱码免费卡1卡二卡3卡| 77777亚洲午夜久久多喷| 好男人视频社区精品免费| 亚洲色大情网站www| 免费一级毛片在线观看| 免费大片黄在线观看| 亚洲最大激情中文字幕| 美女视频黄a视频全免费网站色窝| 亚洲av无码乱码国产精品| 18禁美女裸体免费网站| 亚洲高清中文字幕免费| 在线观看免费精品国产| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲国产区男人本色| 全黄性性激高免费视频| 久久国产美女免费观看精品| 亚洲AV无码专区亚洲AV伊甸园| 亚洲免费在线视频观看| 亚洲av无码一区二区三区在线播放| 免费国产a国产片高清网站| 成人无码区免费A∨直播| 亚洲综合在线观看视频| 免费无码又爽又刺激毛片| av成人免费电影| 亚洲精品午夜在线观看| 精品国产精品久久一区免费式| 亚洲高清免费视频| 亚洲色图黄色小说| 亚洲AV成人精品日韩一区18p| 人人揉揉香蕉大免费不卡| 亚洲真人无码永久在线观看| 国产亚洲精品美女久久久| 毛片免费观看网址| 中文字幕成人免费高清在线 | 久久久精品国产亚洲成人满18免费网站 |