EnableViewState属性的作用是指示是否在页请求之间保持视图状态。如果要保持视图状态,则为 true;否则为 false。默认值为 true。
如果我们未设置EnableViewState属性,那么默认情况下它的值为true.
这时在最终生成的Page页中,.net会往自动生成的一个name='__VIEWSTATE'的隐藏控件中将请求前的数据经加密后保存在这里面。有时候,这会影响网页加载速度,因为它经常会生成很大一串加密字符。本章,我们详细解析一下该属性,以方便在以后的开发中帮助你决定是否应该将该属性设置为false.
先做一个测试:
新建一个Page页,在aspx页中拖入一个ListBox控件与Button控件。如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" % >
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
<title ></title >
</head >
<body >
<form id="form1" runat="server" >
<asp:ListBox ID="list_box" runat="server" Width="200" ></asp:ListBox >
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" / >
</form >
</body >
</html >
后台代码:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
this.list_box.Items.Add(DateTime.Now.ToString());
}
}
}
我们会发现,每次点击一次Button按钮,list_box的Items集合中就会增加一项。
如果我们将该页的EnableViewState设置为false
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" EnableViewState="false" % >
这时候我们会发现,不管点击多少次Button按钮,list_box的Items集合中永远只有最新添加的一项。
这说明,我们设置了EnableViewState=false后,list_box不再保存之前动态添加的内容。
注意:在网上看到有些文章指出,当设置TextBox控件的EnableViewState=false,页面回发后TextBox控件不再显示用户在回发前输入的数据。其实该说法是错误的,即使设置了EnableViewState=false,TextBox控件也会在回发后显示用户之前输入的数据。
总结:EnableViewState 指定在回发时是否保存服务器控件的的动态属性与值。
EnableViewState 的默认值为 true,设置为false可以降低数据的传送量,我们应该在允许的情况下将该属性设置为false。
关于EnableViewState的设置顺序,请参考本站
EnableViewState的设置位置及优先级c