我维护的网站之一很大程度上依赖于使用 ViewState (这不是我的代码)。但是,在某些页面上 ViewState 过于臃肿,Safari 会抛出一个 "Validation of viewstate MAC failed" 错误。

这似乎只发生在 Safari 中。Firefox、IE 和 Opera 在同一场景中均加载成功。

有帮助吗?

解决方案 3

我对此做了一些研究,虽然我不完全确定其原因,但我相信这是因为 Safari 没有返回完整的结果集(因此裁剪它)。

我一直在与另一位开发人员讨论,并在 Channel 9 上找到了以下帖子,其中建议使用 SQL State 服务来存储视图状态,以避免回发问题和页面大小。

http://channel9.msdn.com/forums/TechOff/250549-ASPNET-ViewState-flawed-architecture/?CommentID=270477#263702

这看起来是最好的解决方案吗?

其他提示

虽然我支持 Channel 9 解决方案,但也要注意,在某些托管环境中 Safari 不被视为高级浏览器。您可能需要将其添加到应用程序的浏览器中才能使用某些 ASP.Net 功能。

这是我们在使用 ASP 菜单控件的客户站点中遇到的一些问题的根本原因。

我的第一个调用端口是浏览页面上的元素并查看哪些控件:

  1. 当我关闭 ViewState 时仍然可以工作
  2. 可以移出页面并放入 AJAX 调用中,以便在需要时加载

如果做不到这一点,这里是免责声明 - 我从未在面向 Web 的网站上使用过此解决方案 - 但在过去,当我想要消除有限受众应用程序中的大量 ViewState 时,我将 ViewState 存储在会话中。

它对我有用,因为对内存的影响对于用户数量来说并不重要,但如果您正在运行一个相当受欢迎的网站,我不会推荐这种方法。但是,如果会话解决方案适用于 Safari,您始终可以检测到用户代理并进行适当的修改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top