<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="............"请问,如果拿到一个网站页面上的那段value值,有方法可以把它反序列化成ViewState对象吗?

解决方案 »

  1.   

    ViewState的默认编码是Base64,找下Base64的解码代码就可以了。如果是要查看ViewState的内容,这里有一个查看的工具的介绍:
    http://www.cnblogs.com/neuhawk/archive/2007/06/12/781071.html
      

  2.   

    byte[] bs = Convert.FromBase64String("...");
    string str = System.Text.Encoding.Utf8.GetString(bs);
      

  3.   

    value保存了控件状态和值,采用Base64编码方式保存,
    可下载ViewState解码器ViewState Decoder 
    或void LoadViewState (object state)protected override object LoadPageStateFromPersistenceMedium()
    {
        string viewstate = Request.Form["__"];
        byte[] data = Convert.FromBase64String(viewstate);
        string str = Convert.ToBase64String(data);
        LosFormatter formatter = new LosFormatter();
        return formatter.Deserialize(str);
    }参考
      

  4.   

    请教 wuyq11大哥, byte[] data = Convert.FromBase64String(viewstate);
        string str = Convert.ToBase64String(data); 这两句是必须的吗? 为什么从Base64还是转到Base64呢?
      

  5.   

    这个问题你可以参考一下这个论坛顶部那本 庖丁解牛的书,那本书里对这个有很详细的解释。肯定是可以反序列话的,要不怎么获取ViewState的值。
      

  6.   

    ViewState看上去是StateBag类型,我取到值后反序列化,再转成StateBag类型,可为什么就不能用索引取值呢?代码如下:           ViewState["Test"] = "xxxx";然后取到,转base64,反序列化后:            object o = formatter.Deserialize(value);
                StateBag viewState = o as StateBag;再用   viewState["Test"] 时,viewState["Test"] = null
    其实 viewState这个对象不为空, 但是好像不能再通过["Test"]取到值