Frameworks ASP.Net无效的视图状态错误

Frameworks ASP.Net无效的视图状态错误,frameworks,iis-6,asp.net-3.5,Frameworks,Iis 6,Asp.net 3.5,我随机遇到以下错误: 消息:viewstate无效。 客户端IP:xx.xxx.xxx.xx 港口:2324 用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0;SLCC1;.NET CLR 2.0.50727;Media Center PC 5.1;InfoPath.2;.NET CLR 3.5.30729;.NET CLR 3.0.30618) 视图状态: 堆栈跟踪: 消息:Base-64字符数组的长度无效。 堆栈跟踪:位于System.Convert.F

我随机遇到以下错误:

消息:viewstate无效。 客户端IP:xx.xxx.xxx.xx 港口:2324 用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0;SLCC1;.NET CLR 2.0.50727;Media Center PC 5.1;InfoPath.2;.NET CLR 3.5.30729;.NET CLR 3.0.30618) 视图状态:

堆栈跟踪: 消息:Base-64字符数组的长度无效。 堆栈跟踪:位于System.Convert.FromBase64String(字符串s) 反序列化(字符串输入字符串) 在System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(字符串序列化状态)中 在System.Web.UI.Util.DeserializeWithAssert(IStateFormatter格式化程序,String serializedState) 在System.Web.UI.HiddenFieldPageStatePersister.Load()中


有人能告诉我如何调试这个吗?*

这家伙也遇到了同样的错误,我建议你看看


此问题的解决方案可能是在machine.config中设置一个标志,以防止ASP.NET在每次应用程序启动时生成新密钥。

出现此错误的原因有很多。 在CLR v1.1上,IIS出现了一个问题,导致了这种情况。看见然而,既然你是3.5岁,我想情况并非如此

对于可能出现的问题,hee还有其他建议:


他的一个原因是.NET3.5SP1修复的。早期版本中的问题是viewstate呈现在页面底部。如果在加载整个页面之前将页面发回,则提交回服务器的viewstate不完整,因此无效

我不知道您使用的是哪个版本的框架,以及是否可以更新。如果不能,可以重写BasePage类的Render方法,以便在顶部呈现viewstate:

private static string[] aspNetFormElements = new string[] 
    { 
        "__EVENTTARGET",
        "__EVENTARGUMENT",
        "__VIEWSTATE",
        "__EVENTVALIDATION",
        "__VIEWSTATEENCRYPTED",
    };

    protected override void Render(HtmlTextWriter writer)
    {

        StringWriter stringWriter = new StringWriter();

        HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

        base.Render(htmlWriter);

        string html = stringWriter.ToString();

        int formStart = html.IndexOf("<form");

        int endForm = -1;

        if (formStart >= 0)

            endForm = html.IndexOf(">", formStart);


        if (endForm >= 0)
        {

            StringBuilder viewStateBuilder = new StringBuilder();

            foreach (string element in aspNetFormElements)
            {

                int startPoint = html.IndexOf("<input type=\"hidden\" name=\"" + element + "\"");

                if (startPoint >= 0 && startPoint > endForm)
                {

                    int endPoint = html.IndexOf("/>", startPoint);

                    if (endPoint >= 0)
                    {

                        endPoint += 2;

                        string viewStateInput = html.Substring(startPoint, endPoint - startPoint);

                        html = html.Remove(startPoint, endPoint - startPoint);

                        viewStateBuilder.Append(viewStateInput).Append("\r\n");

                    }

                }

            }


            if (viewStateBuilder.Length > 0)
            {

                viewStateBuilder.Insert(0, "\r\n");

                html = html.Insert(endForm + 1, viewStateBuilder.ToString());

            }

        }

        writer.Write(html);
    }
private static string[]aspNetFormElements=新字符串[]
{ 
“\u事件目标”,
“_事件参数”,
“uu VIEWSTATE”,
“\u事件验证”,
“uu VIEWSTATEENCRYPTED”,
};
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
StringWriter StringWriter=新StringWriter();
HtmlTextWriter htmlWriter=新的HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
字符串html=stringWriter.ToString();
int formStart=html.IndexOf(“,formStart”);
如果(endForm>=0)
{
StringBuilder viewStateBuilder=新建StringBuilder();
foreach(aspNetFormElements中的字符串元素)
{
int startPoint=html.IndexOf(“,startPoint);
如果(端点>=0)
{
终点+=2;
字符串viewStateInput=html.Substring(startPoint,endPoint-startPoint);
html=html.Remove(startPoint,endPoint-startPoint);
viewStateBuilder.Append(viewStateInput.Append(“\r\n”);
}
}
}
如果(viewStateBuilder.Length>0)
{
viewStateBuilder.Insert(0,“\r\n”);
html=html.Insert(endForm+1,viewStateBuilder.ToString());
}
}
writer.Write(html);
}

在Windows 2003/2008中禁用TCP卸载引擎(TOE)(如果启用)将是确定其是否与网络堆栈、应用程序或客户端相关的第一步:


错误日志/事件查看器中出现“无效视图状态”错误的另一个不常被提及的原因是,在内容交换机后面运行的服务器没有运行最新版本的.NET更新

通常最好的做法是让服务器场中/内容交换机后面的所有服务器尽可能相同