如何阻止viewstate过时?

时间:2015-06-10 15:17:21

标签: asp.net webforms viewstate

我有一个ASP.NET Web表单应用程序,它使用HTML5“离线Web应用程序”技术在浏览器缓存中存储页面很长一段时间。在这种情况下,用户可以按下表单上的按钮,并在从服务器获取表单后的几天或几周内进行回发(即GET和POST请求之间的长时间间隔)。

有时,此回发因经典的“视图状态MAC验证失败”而失败。我的问题分为两部分:

  1. 是什么导致视图状态变得陈旧?即我如何按需复制问题?

  2. 我能做些什么来确保永远不会发生这种情况?请记住,有建议说我永远不应禁用viewstate MAC。

1 个答案:

答案 0 :(得分:1)

您可以通过在web.config文件中添加机器密钥来解决此问题。

您可以使用在线工具生成机器密钥,例如。 http://www.developerfusion.com/tools/generatemachinekey/

在web.config中,它进入配置>的System.Web。

但是,如果您对Web表单或表单ListItem值进行更改等,它将无法提供帮助。

您最好不要使用ASP.NET表单,而是通过AJAX或使用HTML表单提交(但仍使用ASP.NET Web表单)。

<强>更新

ViewState可以去的原因之一&#34;陈旧&#34;是应用程序池是否循环或停止/重新启动。如果在一定时间内没有请求,则IIS中的默认设置将导致您的网站关闭,然后在请求进入时再次重新启动。

您可以测试的一种方法是(1)在您的站点上打开Web表单(2)更改您的web.config文件并重新保存(3)提交表单。如果您没有机器密钥,此时您将收到一个视图状态错误。