ViewState是ASP.NET的.aspx页面特有的,是页面级的状态保持。一般用在内网系统和网站后台。
namespace WebFormTest.TestCollect { public partial class ViewStateTest2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //服务器端多值控件状态自动保存在页面属性ViewState中 DropDownList1.Items.Add(new ListItem("下拉1", "1")); //手动向ViewState中添加值 ViewState["myKey"] = "MyData"; //值的类型需要可以被序列化的 ViewState["myKey2"] = "MyData2"; ViewState["myKey3"] = "MyData3"; } //客户端向服务器发送请求,服务器先判断Post过来的<input>标签id为__VIEWSTATE中是否有值 //有的话,会将<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjY1ODU1O" />的值 //先将viewstate对象反反序列化,再经过Base64编码,再输出到客户端这个隐藏域的value中 //浏览器读取时对value进行反编译然后反序列化最后输出。这个过程是自动进行的 protected void Button1_Click(object sender, EventArgs e) { string myData = ""; if (ViewState["myKey"] != null) { myData = (string)ViewState["myKey"]; } Response.Write(myData); } } }
html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> //需要添加form,__ViewState中的值才能被Post提交到服务器 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:DropDownList ID="DropDownList1" runat="server"> </asp:DropDownList> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /><asp:Button ID="Button2" runat="server" Text="按钮" /> <a href="ViewStateTest2.aspx">点击</a> <div> </div> </form> </body> </html>
aspx页面源码 :
<!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> 无标题页 </title></head> <body> <form name="form1" method="post" action="ViewStateTest2.aspx" id="form1"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjY1ODU1ODYyDxYGHgVteUtleQUGTXlEYXRhHgZteUtleTIFB015RGF0YTIeBm15S2V5MwUHTXlEYXRhMxYCAgMPZBYCAgUPEGQPFgFmFgEQBQfkuIvmi4kxBQExZ2RkZOR3mPN/Tl+LGb/Sx67gVCjC7dtv" /> </div> <div> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="B053663F" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgKRwNyfCALs0bLrBgKSi6WLBgLs0fbZDAKM54rGBgK7q7GGCEiBSNc5x1r+b14S9oQGE/luT1+Z" /> </div> <span id="Label1">Label</span> <input name="TextBox1" type="text" id="TextBox1" /> <select name="DropDownList1" id="DropDownList1"> <option value="1">下拉1</option> </select> <input name="TextBox2" type="text" id="TextBox2" /> <input type="submit" name="Button1" value="Button" id="Button1" /><input type="submit" name="Button2" value="按钮" id="Button2" /> <a href="ViewStateTest2.aspx">点击</a> <div> </div> </form> </body> </html>
用工具ViewStateDecoder反编译查看隐藏域中的值如下: