16

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

这似乎只发生在 Safari 中。Firefox、IE 和 Opera 都在相同的场景下成功加载。

4

3 回答 3

5

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

这就是我们对使用 ASP Menu 控件的客户端站点感到头疼的根本原因。

于 2008-08-04T13:44:49.473 回答
3

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

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

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

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

于 2008-08-04T13:00:32.043 回答
2

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

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

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

这似乎是最好的解决方案吗?

于 2008-08-04T12:40:49.137 回答