无效的视图状态信息可能已损坏

时间:2011-08-16 07:42:58

标签: asp.net vb.net viewstate

运行我的vb.net网络应用时,我不断收到以下错误消息:

  

此页面的状态信息无效,可能已损坏。

View full message here.

经过精心搜索后,我遇到了this Microsoft page,它完全描述了问题。可能的原因似乎是“情景2”:

  

场景2:您修改了页面,这会导致阴影,复制文件   要重新生成的临时ASP.NET文件文件夹。用户有一份副本   此更改之前请求的页面,用户发布   重新生成该文件夹中的文件后的页面。

但奇怪的是 - 尽管说有一个修补程序,但实际上并未给出链接。

有人可以建议修复吗?

更新:我似乎通过在标记as recommended here的页面节点中使用EnableEventValidation="False"来防止发生此错误。更多的解决方法而不是修复。

3 个答案:

答案 0 :(得分:1)

不建议按照Page.EnableEventValidation Property中的说明禁用EnableEventValidation。

之前我遇到过这个问题,并删除了ASP.NET临时文件夹中的所有文件。

文件夹路径:

.NET 2:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
.NET 4:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files

答案 1 :(得分:1)

在我的一个项目中,只有当我点击一个按钮或链接时,我才会在Mozilla Firefox中收到此错误。

这是因为firefox缓存了表单字段。有两种方法可以解决这个问题。

  1. 在cs文件中写下以下snipet

    protected override void OnPreInit(EventArgs e) {     base.OnPreInit(E);     if(Request.Browser.MSDomVersion.Major == 0)//如果是非IE浏览器     {         Response.Cache.SetNoStore();     } }

  2. 在页面加载中,写下以下状态

    Response.Cache.SetNoStore();

  3. 现在错误已被删除,您可以满意地睡觉。

    http://yourtahir.wordpress.com/2008/06/26/the-state-information-is-invalid-for-this-page-and-might-be-corrupted/

答案 2 :(得分:0)

可能过时,但这可以通过ajax调用页面控制来解决我的观点问题。 自定义CompressedViewState: 添加此代码:

private ObjectStateFormatter _formatter = new ObjectStateFormatter();
protected override void
           SavePageStateToPersistenceMedium(object viewState)
    {
        MemoryStream ms = new MemoryStream();
        _formatter.Serialize(ms, viewState);
        byte[] viewStateArray = ms.ToArray();
        ClientScript.RegisterHiddenField("__COMPRESSEDVIEWSTATE",
            Convert.ToBase64String(
            CompressViewState.Compress(viewStateArray)));
    }
    protected override object LoadPageStateFromPersistenceMedium()
    {
        string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];
        byte[] bytes = Convert.FromBase64String(vsString);
        bytes = CompressViewState.Decompress(bytes);
        return _formatter.Deserialize(
            Convert.ToBase64String(bytes));
    }