可能是過期的,但是這個治癒了我的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));
}
方案2可能不是唯一原因。此外,在這種情況下,你會很少得到上述例外(只有當你的網站文件發生變化時) - 如果你始終得到上述錯誤,那麼問題可能在其他地方。此問題的另一個常見原因可能是控制樹中的更改 - 如果您動態創建控件等,則可能會發生上述錯誤。 – VinayC
僅供參考 - 關閉事件驗證不是一個好的解決方案。它是作爲安全機制的一部分來防止很多不好的事情。 – NotMe
這是一個非常令人惱火的問題,我們到目前爲止已經將我們的系統追蹤到特定的機器上,而不是服務器端的代碼。可以通過在某些機器上的Windows XP上的IE中重新排序gridview來重新創建問題。其他類似設置的機器不存在問題。其他瀏覽器甚至不會在IE中發生故障的機器上報告問題。 – fritterfatboy