2011-08-16 45 views
1

我不斷收到以下錯誤消息時我跑我的vb.net web應用程序:無效的視圖狀態信息可能被損壞

狀態信息是這個頁面無效,可能已損壞。

View full message here.

一個很好的搜索後,我遇到了this Microsoft page,這正好說明了問題。可能的原因似乎是「情景2」:

方案2:您可以修改您的網頁,這將導致陰影,複製的文件在 臨時ASP.NET文件的文件夾進行再生。用戶擁有 副本,該副本在更改之前請求的頁面,用戶在該文件夾中的文件重新生成後發佈 頁面。

但奇怪 - 儘管說有一個修補程序,實際上並沒有給它的鏈接。

任何人都可以提出修復方案嗎?

已更新:我似乎通過在標記as recommended here的頁面節點中使用EnableEventValidation="False"來防止發生此錯誤。更多的是解決問題的方法。

+0

方案2可能不是唯一原因。此外,在這種情況下,你會很少得到上述例外(只有當你的網站文件發生變化時) - 如果你始終得到上述錯誤,那麼問題可能在其他地方。此問題的另一個常見原因可能是控制樹中的更改 - 如果您動態創建控件等,則可能會發生上述錯誤。 – VinayC

+0

僅供參考 - 關閉事件驗證不是一個好的解決方案。它是作爲安全機制的一部分來防止很多不好的事情。 – NotMe

+1

這是一個非常令人惱火的問題,我們到目前爲止已經將我們的系統追蹤到特定的機器上,而不是服務器端的代碼。可以通過在某些機器上的Windows XP上的IE中重新排序gridview來重新創建問題。其他類似設置的機器不存在問題。其他瀏覽器甚至不會在IE中發生故障的機器上報告問題。 – fritterfatboy

回答

1

不建議按照Page.EnableEventValidation Property中的說明禁用EnableEventValidation。

我以前遇到過這個問題,並通過刪除ASP.NET臨時文件夾中的所有文件來結束它。

文件夾路徑:

.NET 2:C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \臨時ASP.NET文件
.NET 4:C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files

0

可能是過期的,但是這個治癒了我的viewstate問題,用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)); 
    } 
1

在我的項目之一,我得到這個錯誤在Mozilla Firefox只是,每當我點擊一個按鈕或鏈接。

這是因爲firefox緩存表單域的事實。兩種方法來解決這個問題。

  1. 寫入按照你的CS文件snipet

    保護覆蓋無效OnPreInit(EventArgs的五){ base.OnPreInit(E); if(Request.Browser.MSDomVersion.Major == 0)//如果它是非IE瀏覽器 Response.Cache。SetNoStore(); } }

  2. 在頁面加載,寫入下列statemet

    Response.Cache.SetNoStore();

現在錯誤已被刪除,您可以滿意地睡覺。

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

相關問題