创建一个ASP.NET页面PageViewStateDemo.aspx实现一个文本框,两个按钮实现文本框的隐藏和显示,以说明ViewState字段值是如何工作的。
页面代码如下:
<formid="form1"runat="server">
<div><br/><br/><br/><br/>
</div>
<divstyle="display:inline; z-index:101; left:16px; width:70px; position:absolute;
top:25px; height:15px">Test Field</div>
<asp:TextBoxID="txtName"style="z-index:106; left:101px; position:absolute;
top:23px"runat="server"></asp:TextBox>
<asp:ButtonID="btnHide"
style="z-index:111; left:15px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Hide"onclick="btnHide_Click" />
<asp:ButtonID="btnShow"
style="z-index:112; left:95px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Show"onclick="btnShow_Click" />
</form>
后台代码很简单:
protected void btnHide_Click(object sender, EventArgs e) { this.txtName.Visible = false; } protected void btnShow_Click(object sender, EventArgs e) { this.txtName.Visible = true; }
在浏览器查看该页面,在ASP.NET页面返回后查看其源代码:
利用刚才提到的ViewState查看工具ViewStateDecoder查看ViewState:
点击Hide按钮再看源代码:
可以看到ViewState的值不一样了:
ViewState在开发Web页面是确实可以节约时间。但是,它有性能成本。在上面的例子可以看出,对服务器控件的一个属性的最轻微的修改也会改变视图状态的大小。在页面中添加10到20个简单的服务器控件,和几个高级的服务器控件,可以看到呈现HTML的大小可以变成应用程序的一个瓶颈,尤其是对于带宽有限的用户来说。
为了提高ASP.NET应用程序的性能,必须得控制服务器控件的使用以降低呈现的HTML的大小。控制服务器控件的手段就是在不需要服务器的代码执行期间在不需要与控件交互时使用静态的HTML控件。
对一个正常的HTML控件使用runat=“server”属性,它就可以从服务器端的代码中访问,并且和ASP.NET服务器控件具有相同的性能损失。
禁用ViewState的方式有:
1、禁用控件的ViewState
<asp:TextBox ID="TextBox1" EnableViewState="false" runat="server"></asp:TextBox>
设置TextBox1的ASP.NET文本框在视图状态中不再保存任何信息。但不会影响页面中其他控件或页面本身的ViewState信息。
2、禁用页面的ViewState
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>
禁用用户控件的ViewState跟禁用页面的ViewState类型也是设置其EnableViewState="false" 。
3、禁用应用程序的ViewState
<pages enableViewState="false">