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("

"
); // 解析内容 byte[] buffer = Convert.FromBase64String(vsRaw); string vsText = Encoding.ASCII.GetString(buffer); Response.Write("ViewState Text: " + Server.HtmlEncode(vsText)); } } }

 

3. 测试效果

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值