运行我的vb.net网络应用时,我不断收到以下错误消息:
此页面的状态信息无效,可能已损坏。
经过精心搜索后,我遇到了this Microsoft page,它完全描述了问题。可能的原因似乎是“情景2”:
场景2:您修改了页面,这会导致阴影,复制文件 要重新生成的临时ASP.NET文件文件夹。用户有一份副本 此更改之前请求的页面,用户发布 重新生成该文件夹中的文件后的页面。
但奇怪的是 - 尽管说有一个修补程序,但实际上并未给出链接。
有人可以建议修复吗?
更新:我似乎通过在标记as recommended here的页面节点中使用EnableEventValidation="False"
来防止发生此错误。更多的解决方法而不是修复。
答案 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缓存了表单字段。有两种方法可以解决这个问题。
在cs文件中写下以下snipet
protected override void OnPreInit(EventArgs e) { base.OnPreInit(E); if(Request.Browser.MSDomVersion.Major == 0)//如果是非IE浏览器 { Response.Cache.SetNoStore(); } }
在页面加载中,写下以下状态
Response.Cache.SetNoStore();
现在错误已被删除,您可以满意地睡觉。
答案 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));
}