zoukankan      html  css  js  c++  java
  • ASP.NET : ViewState解析

    ASP.NET 的ViewState是使用Base64的字符串保存在一个隐藏域中的。下面通过一个例子来解析它们

    1. 页面

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApp._Default" %>
    
    <!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></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:GridView ID="gv" runat="server" AllowPaging="true" AllowSorting="true" PageSize="5" onpageindexchanging="gv_PageIndexChanging"></asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

    2. 页面代码

    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.IO;
    using System.Text;
    
    namespace WebApp
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataBind();
                }
            }
    
            public override void DataBind()
            {
                //1. 最传统的做法,直接在页面中处理业务逻辑
                DirectoryInfo dir = new DirectoryInfo("e:\\temp");
                gv.DataSource = dir.GetFiles();
                gv.DataBind();
    
                //2. 通过分层来实现业务逻辑的隔离
                //localhost.Service1SoapClient proxy = new WebApp.localhost.Service1SoapClient();
    
                //gv.DataSource = proxy.GetFiles();
                //gv.DataBind();
            }
    
            protected void gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                gv.PageIndex = e.NewPageIndex;
                DataBind();
            }
    
    
            protected override void SavePageStateToPersistenceMedium(object viewState)
            {
                // 调用基类的方法,完成基本操作
                base.SavePageStateToPersistenceMedium(viewState);
                // 获取ViewState的Base64值
                LosFormatter format = new LosFormatter();
                StringWriter writer = new StringWriter();
                format.Serialize(writer, viewState);
                string vsRaw = writer.ToString();
                Response.Write("ViewState Raw: " + Server.HtmlEncode(vsRaw));
                Response.Write("<br /><br />");
                // 解析内容
                byte[] buffer = Convert.FromBase64String(vsRaw);
                string vsText = Encoding.ASCII.GetString(buffer);
                Response.Write("ViewState Text: " + Server.HtmlEncode(vsText));
            }
           
        }
    }
    

    3. 测试效果

    image

  • 相关阅读:
    命令行环境下简单实用的工具——重定向&管道
    阿里2014校招笔试题(南大)——利用thread和sleep生成字符串的伪随机序列
    Pooled Allocation(池式分配)实例——Keil 内存管理
    modelsim数据导出用于matlab绘图
    顺序块和并行块
    初入博园
    数字图像处理实验(7):PROJECT 04-03 , Lowpass Filtering 标签: 图像处理MATLAB 2017-05-25 09:30 109人
    杭电acm刷题(3):1062,Text Reverse 标签: 杭电acm 2017-05-15 08:26 126人阅读 评论(0)
    杭电ACM刷题(2):1005,Number Sequence 标签: 杭电acmC语言 2017-05-11 22:43 116人阅读
    数字图像处理实验(6):PROJECT 04-02,Fourier Spectrum and Average Value 标签: 图像处理MATLABfft 2017-05-07 23:1
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1627982.html
Copyright © 2011-2022 走看看