Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在VS调试器中浏览my page ViewState的内容?_Asp.net_Viewstate - Fatal编程技术网

Asp.net 如何在VS调试器中浏览my page ViewState的内容?

Asp.net 如何在VS调试器中浏览my page ViewState的内容?,asp.net,viewstate,Asp.net,Viewstate,我有一个使用率很高的ASP.net网页。问题是ViewState变得越来越大!该页面有一个带有分页和排序的ASP.net GridView。然而,ViewState的大小似乎与页面上的内容完全不成比例 我想知道如何在Visual Studio 2010调试器中浏览ViewState的内容,以便知道ViewState中保存了哪些数据。我不确定它是否适合您的需要,但您可以查看此工具: 下面是一个帮助类,您可以查看它将ViewState的内容转储到日志文件中。显然,您可以根据需要修改它 // Wri

我有一个使用率很高的ASP.net网页。问题是ViewState变得越来越大!该页面有一个带有分页和排序的ASP.net GridView。然而,ViewState的大小似乎与页面上的内容完全不成比例


我想知道如何在Visual Studio 2010调试器中浏览ViewState的内容,以便知道ViewState中保存了哪些数据。

我不确定它是否适合您的需要,但您可以查看此工具:

下面是一个帮助类,您可以查看它将ViewState的内容转储到日志文件中。显然,您可以根据需要修改它

// Written by Greg Reddick. http://www.xoc.net
public static void SeeViewState(string strViewState, string strFilename)
{
    if (strViewState != null)
    {
        Debug.Listeners.Clear();
        System.IO.File.Delete(strFilename);
        Debug.Listeners.Add(new TextWriterTraceListener(strFilename));

        string strViewStateDecoded = (new System.Text.UTF8Encoding()).GetString(Convert.FromBase64String(strViewState));

        string[] astrDecoded = strViewStateDecoded.Replace("<", "<\n").Replace(">", "\n>").Replace(";", ";\n").Split('\n');
        Debug.IndentSize = 4;

        foreach (string str in astrDecoded)
        {
            if (str.Length > 0)
            {
                if (str.EndsWith("\\<"))
                {
                    Debug.Write(str);
                }
                else if (str.EndsWith("\\"))
                {
                    Debug.Write(str);
                }
                else if (str.EndsWith("<"))
                {
                    Debug.WriteLine(str);
                    Debug.Indent();
                }
                else if (str.StartsWith(">;") || str.StartsWith(">"))
                {
                    Debug.Unindent();
                    Debug.WriteLine(str);
                }
                else if (str.EndsWith("\\;"))
                {
                    Debug.Write(str);
                }
                else
                {
                    Debug.WriteLine(str);
                }
            }
        }

        Debug.Close();
        Debug.Listeners.Clear();

        //Get into the debugger after executing this line to see how .NET looks at
        //the ViewState info. Compare it to the text file produced above.
        Triplet trp = (Triplet) ((new LosFormatter()).Deserialize(strViewState));
    }
}
有关更多详细信息,请参阅此链接:


谢谢你的回答。不幸的是,当我使用viewstate运行代码时,您的代码抛出异常(它似乎包含一些原始HTML)。我会看看我能辨别出什么。真的没有办法像使用应用程序或会话变量那样访问单个ViewState成员吗?
DebugViewState.SeeViewState(Request.Form("__VIEWSTATE"), "c:\temp\viewstate.txt")