ViewState可以在控制項,頁,程式,全域配置中設定。預設情況下 EnableViewState 為 true 。如果要禁止所有頁面 ViewState 功能,可以在程式配置中把 EnableViewState 設為 false 。
在控制項中:
<asp:DataGridEnableViewState="false"%>
或
DataGrid1.EnableViewState= false;
在頁中:
<%@ PageEnableViewState="false" %>
或
Page.EnableViewState= false;
在程式中:
在web.config中加入
<pages enableViewState="false" />
在全域配置:
在machine.config中修改
<pages enableViewState="false" />
EnableViewState優先順序別:
全域配置 < 程式 < 頁< 控制項
注意:下列伺服器控制項不能禁止ViewState
Textbox
Checkbox
Checkbox List
RadioButtonList
上面控制項的狀態通過IPostBackEventHandler 和 IPostBackDataHandler介面處理,而不是ViewState的機制,所以EnableViewState沒有效果。(我發現類似於input的控制項EnableViewState都沒有作用)
ViewState是ASP.NET中用來儲存WEB控制項回傳時狀態值一種機制。在WEB表單(FORM)的設定為runat="server",這個表單(FORM)會被附加一個隱藏的屬性_VIEWSTATE。_VIEWSTATE中存放了所有控制項在ViewState中的狀態值。
ViewState是類Control中的一個域,其他所有控制項通過繼承Control來獲得了ViewState功能。它的類型是system.Web.UI.StateBag,一個名稱/值的對象集合。
當請求某個頁面時,ASP.NET把所有控制項的狀態序列化成一個字串,然後做為表單的隱藏屬性送到用戶端。當用戶端把頁面回傳時,ASP.NET分析回傳的表單內容,並賦給控制項對應的值。當然這些全部是由ASP.NET負責的,對使用者來說是透明的。
Session存在於伺服器端可以跨頁面.耗費伺服器資源.
ViewState載體是分頁檔,消耗頻寬.