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被去掉了