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载体是页面文件,消耗带宽.