1 问题:网站部署之后,排序或者搜索之后报错:The state information is invalid for this page and might be corrupted
2 原因:Viewstate (视图状态持久性机制)
Asp.net页面中ViewState一般是存储在页面的一个隐藏域中:<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="一堆乱七八糟的东西">
很多人可能都遇到过,视图状态被破坏掉了,页面无法显示,
解决方法1:把页面的ViewState去;但不是最佳的;
属性:
enableViewStateMac
指定从客户端回发页时,ASP.NET 是否应该对页的视图状态运行消息身份验证代码 (MAC)。如果为 True,将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。默认值为 True。
viewStateEncryptionMode
指定视图状态的加密模式。ViewStateEncryptionMode 属性重写配置文件中设置的该属性。
此属性可以为下列可能值之一。
Always
视图状态始终加密。
Auto
视图状态根据控件的请求而加密。
Never
视图状态从不加密,即使控件请求加密时也是如此。
此属性是 .NET Framework 2.0 版中的新属性。
默认值为 Auto。
引发上面这种错误的一般原因都是因为网页还没有完全下载完,页面的ViewState不完全,然后就有了Postback,这样就导致了ViewState验证错误。这种解决方法一般就是在页面或者web.config中加上或更改pages属性,如下:
<pages enableEventValidation="false" viewStateEncryptionMode ="Never" />
这样页面就不会进行验证。 可试试;
(2)。接受数据的变量相同导致;在页面,ViewState把表格对象保存后,可能用的是xml格式,但是如果DataSet和 DataTable的名字一样,会导致xml结构上出了问题,所以当ViewState重新读取时发生错误(一个页面的内容里包含了同样名字为 __VIEWSTATE的变量的内容,所以在主页面提交时,会发现内容已经变化了.所以没办法提交.)
3 解决办法:
首先尝试了在页面,form,repeater上都禁用了viewstate,但是不起作用还是不行,后尝试修改web.config并实现。
web.config,加配置:<pages validateRequest="false" enableViewStateMac='false' />
若是崩掉,提示customers之类的错误,再添加一个配置:<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm"></customErrors>
ok了~~嘻嘻~~