zoukankan      html  css  js  c++  java
  • 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反编译查看隐藏域中的值如下:

  • 相关阅读:
    如何制作扫描版的文档
    网易云音乐歌单下载
    【超链接】一些OI学习网站
    爬虫 之Requests库的详细使用
    爬虫 之基本原理
    Django Rest framework 框架之认证使用和源码执行流程
    restful 规范(建议)
    基于Django实现restful api
    csrf补充
    Django Rest framework 框架
  • 原文地址:https://www.cnblogs.com/zxx193/p/3480769.html
Copyright © 2011-2022 走看看