如何阻止视图状态过时?
how to stop viewstate going stale?
我有一个 ASP.NET 网络表单应用程序,它使用 HTML5 "Offline Web Apps" 技术将页面长时间存储在浏览器缓存中。在这种情况下,用户可以按下表单上的按钮并在从服务器获取表单后的几天或几周内进行回发(即 GET 和 POST 请求之间的长时间间隔)。
有时,此回发会因经典 "Validation of viewstate MAC failed" 而失败。我的问题分为两部分:
是什么导致视图状态过时?即如何按需复制问题?
我能做些什么来确保这种情况永远不会发生吗?请记住,有建议说我永远不应该禁用视图状态 MAC.
您可以通过向 web.config 文件添加机器密钥来解决此问题。
您可以使用在线工具生成机器密钥,例如。 http://www.developerfusion.com/tools/generatemachinekey/.
在 web.config 中进行配置 > system.web。
但是,如果您更改 Web 表单或表单 ListItem 值等,这将无济于事。
您最好不要使用 ASP.NET 表单,而是通过 AJAX 或使用 HTML 表单提交(但仍使用 ASP.NET Web 表单)。
已更新
ViewState 可以 "stale" 的原因之一是应用程序池是否回收或 stops/restarts。如果在一定时间内没有请求,IIS 中的默认设置将导致您的网站关闭,然后在有请求时重新启动。
您可以测试的一种方法是 (1) 在您的网站上打开一个网络表单 (2) 更改您的 web.config 文件并重新保存 (3) 提交表单。如果您没有机器密钥,此时会出现视图状态错误。
我有一个 ASP.NET 网络表单应用程序,它使用 HTML5 "Offline Web Apps" 技术将页面长时间存储在浏览器缓存中。在这种情况下,用户可以按下表单上的按钮并在从服务器获取表单后的几天或几周内进行回发(即 GET 和 POST 请求之间的长时间间隔)。
有时,此回发会因经典 "Validation of viewstate MAC failed" 而失败。我的问题分为两部分:
是什么导致视图状态过时?即如何按需复制问题?
我能做些什么来确保这种情况永远不会发生吗?请记住,有建议说我永远不应该禁用视图状态 MAC.
您可以通过向 web.config 文件添加机器密钥来解决此问题。
您可以使用在线工具生成机器密钥,例如。 http://www.developerfusion.com/tools/generatemachinekey/.
在 web.config 中进行配置 > system.web。
但是,如果您更改 Web 表单或表单 ListItem 值等,这将无济于事。
您最好不要使用 ASP.NET 表单,而是通过 AJAX 或使用 HTML 表单提交(但仍使用 ASP.NET Web 表单)。
已更新
ViewState 可以 "stale" 的原因之一是应用程序池是否回收或 stops/restarts。如果在一定时间内没有请求,IIS 中的默认设置将导致您的网站关闭,然后在有请求时重新启动。
您可以测试的一种方法是 (1) 在您的网站上打开一个网络表单 (2) 更改您的 web.config 文件并重新保存 (3) 提交表单。如果您没有机器密钥,此时会出现视图状态错误。