天天看點

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

一、ViewState概述

① ViewState是基于webform的

② 在web窗體控件屬性處設定runat = "server",這個控件會被附加一個隐藏的屬性_ViewState,_ViewState存放了所有控件在ViewState中的狀态值。

③ 頁面會在輸出時,自動添加下面的隐藏域:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

value處的值隻是base64編碼并不是加密。

④ ViewState是一個名稱/值的對象集合。

⑤ 當請求某個頁面時,ASP.NET會把所有控件的狀态序列化成一個字元串,然後作為窗體的隐藏屬性送到用戶端,當用戶端将頁面回傳時,ASP.NET分析回傳的窗體屬性,并賦給控件對應的值。(恢複現場)

⑥ ViewState不能存儲所有的資料類型,僅支援:String、Integer、Boolean、Array、ArrayList、Hashtable

二、ViewState原理

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

① 浏覽器請求Default.aspx頁面。

② 在伺服器端 發現建立的ViewState 這個時候 會自動建立一個名字叫做__VIEWSTATE(雙下滑線 全部是大寫)的隐藏域 其隐藏域的值經過base64加密以後傳回到浏覽器端這一加密過程在頁面生命周期的SaveState事件中的SaveAllState方法中完成。

③ 當浏覽器送出表單的時候 将__VIEWSTATE的隐藏域也一起送出到服務端 這個時候 頁面生命周期的ReadState事件的ReadAllState方法會将加密後的值反base64解密 最後将值指派給名字叫做xx的ViewState。

④ 最後來操作ViewState中的值。

三、使用

1.使用原因

由于http是無記憶無狀态的協定。頁面傳值給伺服器,都是通過form表單,且控件自己必須有name屬性與value才可以得到值。但是像顯示動态資訊很多情況下并不都是使用滿足上述條件的控件,是以需要将http僞裝為有記憶的。而viewstate就是可以事先這個僞裝術的政策。

2.使用方法

① 條件與設定

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

② 執行個體 aspx.cs檔案:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

aspx界面(就一個自增按鈕):

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

運作效果:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

③ 禁用方法

在預設情況下,所有伺服器控件的viewstate開啟狀态,通過以及幾種途徑來禁止。 1.頁面級别

2.控件級别

3.應用程式級别

4.機器級别

頁面級别禁止的方法是在頁面的開始寫入

<span style="font-family:Microsoft YaHei;"> <% @ Page EnableViewState  = " False "   %>  
or 
 <% @ Page EnableViewState  = " True "   %></span>
           
淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

控件級别是

<span style="font-family:Microsoft YaHei;"> < asp:TextBox id = " txtCode "  runat = " server” EnableViewState= " false "  /> 
 or
 < asp:TextBox id = " txtCode "  runat = " server "  EnableViewState = " true "   /></span>
           

也可以直接在控件處修改

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

程式級别是在web.config中

<span style="font-family:Microsoft YaHei;">< pages enableViewState = " false "   /> 
or
 < pages enableViewState = " true "   />
</span>
           

機器級别是在machine.config中

<span style="font-family:Microsoft YaHei;"> < pages enableViewState = " true "  enableViewStateMac = " true "  ...  /> 
or
 < pages enableViewState = " false "  ...  /> </span>
           

四、補充

1.回憶與直接寫值不同

如果将ViewState禁用後,還是可以在伺服器端給控件text指派的。但是不可回憶(不可還原現場)。通過下面這個執行個體來感受下。

aspx.cs檔案:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

界面:

一個label和一個按鈕

運作效果:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

2.讀取viewstate中的值都是開始鍵值對捆綁設定好的。如果改鍵未設定值時,讀出來的是空。

對上面使用中介紹的ViewState進行一點改進。

aspx.cs檔案:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充

界面:

同上

運作效果:

淺談ViewState一、ViewState概述二、ViewState原理三、使用四、補充