ASP.NET -- WebForm -- ViewState
ASP.NET -- WebForm -- ViewState
1. ViewState的作用
当 ASP .NET 中的表单被提交时,表单会随所有表单值一同重新出现。这是由于 ASP .NET 维持了您的 ViewState。
ViewState 会在页面被提交到服务器时指示其状态。通过在每张页面中的一个 <form runat="server"> 控件中放置一个隐藏域,我们就可以定义页面的状态了。
新建一个Test.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!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>my Test Aspx</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body> </html>
在浏览器--开发者工具可看到ViewState隐藏域的存在:
2. ViewState的开启和关闭
维持 ViewState 是 ASP.NET Web 表单的默认设置。
如果您不希望维持 ViewState,请在 .aspx 页面的顶部包含指令: <%@ Page EnableViewState="false" %>,或为任意控件添加属性:EnableViewState="false"。
整个页面关闭ViewState:
单个控件关闭ViewState:
把EnableViewState="false",在浏览器--开发者工具,还是可以看见隐藏域__ViewState的。
如果想彻底去掉隐藏域__ViewState,必须将runat="server"去掉,换成action (但是这样做,会导致工具箱的控件不能用), 如下图:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!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> <title>my Test Aspx</title> </head> <body> <form action="Test.aspx" method="post"> <div> <input type="text" name="txtName"/> </div> </form> </body> </html>
浏览器开发者工具中可清楚看见,隐藏域__ViewState被去掉了