ASP.NET的頁面生存周期和ViewState實現機制

來源:互聯網
上載者:User

 

一、定義

            頁面生存周期 是指 一個ASP.NET頁面類型對象從初始化到銷毀經過的步驟。

            一旦某個請求對應到一個ASP.NET頁面時,一個直接或間接繼承自 System.Web.UI.Page 類型的對象會開始初始化

       並且開始執行頁面生存周期中的所有步驟。

            這個對象就是用戶端請求的ASP.NET頁面的後台Managed 程式碼

            可在頁面<%@ page /%>指令中加Trace屬性

                        PreInit  Init  InitComplete

                        LoadState  ProcessPostDate  PreLoad  Load  ProcessPostData

                        ChangedEvents  PostBackEvent

                        SaveState  SaveStateComplete  Render

 

二、各步驟的功能

         1).初始化

              PriInit、Init和 InitComplete

             功能: 初始化類對象、初始化主題首頁面、判斷是否是第一次訪問等

         2).載入資料和頁面

              LoadState、ProcessPostDate、PreLoad、Load、ProcessPostData(第二次)等

            首先從頁面回傳的資料載入 ViewState對象, 所有的資料以 Base 64 編碼隨頁面傳入伺服器

            然後開始處理回傳的資料,也就是把表單中的 鍵/值 對存入對象之中

            隨後開始載入頁面,程式員通常會在這裡做一些初始化的編程,例如 OnLoad事件中編寫頁面初始化代碼

            最後再次執行ProcessPostData,以處理Load時新添加的資料。

   

        3).觸發事件

             包含了 ChangedEvents 和 PostBackEvent步驟。

             首先比較 ViewState 中的資料 和 頁面上一次回傳的資料,以發現有哪些事件需要被觸發,這裡事件是被逐一觸發

       的,其順序無法確定

        

        4).儲存狀態並呈現頁面

             SaveState SaveStateComplete Render步驟

            首先,頁面會編碼儲存所有的 ViewState資料

            然後,將其嵌入到頁面的一個隱藏控制項中

            接著,轉換所有的控制項標籤並產生頁面HTML,並且發送回用戶端

 

 

三、ViewState機制

      1).概述

 

      ASP.NET 伺服器控制項 從 System.Web.UI.Control(定義由所有 ASP.NET 伺服器控制項共用的屬性、方法和事件) 繼承名為 ViewState唯讀屬性,使之加入了狀態管理機制。利用之擷取狀態資訊的字典,這些資訊使您可以在同一頁的多個請求間儲存和還原伺服器控制項的檢視狀態  ViewState的類型是 System.Web.UI.StateBag, 它是 儲存 鍵/值 對的字典。

 

      2).ViewState的實現機制

        簡單來說,每次伺服器發送給用戶端的頁面中都隱藏了一個資料,該資料用以儲存ViewState。當用戶端再次提交表單時,ViewState就會又隨這表單一起提交到伺服器端,迴圈往複就達到了持續儲存資料的功能。

      

        步驟

              客戶申請一個新的帶有 ViewState 欄位的頁面,第一次申請時 ViewState欄位內資料為空白

              客戶提交表單,ViewState欄位作為表單的一部分被提交,此時為空白

              伺服器從表單中讀取 ViewState的資料,解碼解密,並且存入 ViewState 對象中,第一次仍然為空白

              伺服器處理完表單資料後,把表單資料相應寫入 ViewState 對象,這時 ViewState對象就有值了

              伺服器把 ViewState 對象加密並編碼,然後寫入頁面的 ViewState 欄位。 此時頁面 ViewState 欄位就包含了

       上次提交的表單內的控制項資料和伺服器代碼寫入ViewState的資料

              伺服器把頁面發還給用戶端,用戶端得到了 ViewState資料

   

因為 Page類繼承自 TemplateControl類,而TemplateControl類又繼承自 Control類,故可以直接使用 ViewState屬性。

這一功能在關閉 控制項的 ViewState之後 極其有用。

 

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;public partial class _Handler:System.Web.UI.Page;{    protected void Page_Load(Object sender, EventArgs e)    {        if(!Page.IsPostBack)        {            //初始化Value值            ViewState["VALUE"]=0;            Output();        }    }        protected void GO_Click(object sender, EventArgs e)    {        //使Value值自增1        ViewState["VALUE"]=(int)ViewState["VALUE"]+1;        Output();    }        private void Output()    {        //呈現  OUTPUT為頁面的asp:Label控制項        Output.Text=ViewState["VALUE"].ToString();    }}

 

 

3). 實質

 

     asp:Label 控制項  實質是System.Web.UI.WebControls.WebControl.Label 它是一個類。由於 WebControl 類繼承自

System.Web.UI.Control類,而 Control 類擁有 ViewState 屬性。 故實質為 使用 ViewState 機制的類。

查看返回頁面的原始碼一般看到類似如下的一個input

                其中 value值 使用 BASE64編碼的。 value值 實質為XML檔案,儲存了 所有了 ViewState對象。

<input type=”hidden” name=”_EVENTVALIDATION” id=”_EVENTVALIDATION” value=”/wEWAgK+heeOALZ767wDFMnBmL0VTVt5dZTfeWG6RrWb7b7jc”/>

 

    而 asp:Textbox 控制項 則是直接 實現 <input type=”hidden” /> 機制,不受 ViewState機制影響

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.