ASP.NET状态保持:ViewState

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反编译查看隐藏域中的值如下:

posted @ 2013-12-18 17:39  IT浪潮之巅  阅读(942)  评论(0)    收藏  举报
   友情链接: 淘宝优惠券