ViewState仅在Safari中无效

我维护的其中一个站点在很大程度上依赖于ViewState使用(它不是我的代码)。 但是,在ViewState超额膨胀的某些页面上,Safari会抛出"Validation of viewstate MAC failed"错误。

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

虽然我是Channel 9解决方案的第二名,但也要注意,在某些托管环境中,Safari不被视为高级浏览器。 您可能需要将其添加到应用程序的browscap中,以便使用一些ASP.Netfunction。

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

我的第一个停靠点是浏览页面上的元素并查看哪些控件:

  1. 关闭ViewState时仍然有效
  2. 可以移出页面并进入AJAX调用,以便在需要时加载

如果失败了,这就是免责声明 – 我从来没有在面向网络的网站上使用过这个解决方案 – 但在过去,我想在有限的受众应用程序中消除大量的ViewStates,我已将ViewState存储在Session中。

它对我有用,因为对内存的打击对于用户数量并不重要,但是如果你运行一个相当受欢迎的网站,我不会推荐这种方法。 但是,如果Session解决方案适用于Safari,您始终可以检测到用户代理和适当的软糖。

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

我一直在与另一个开发人员讨论,并在Channel 9上发现了以下post,它建议使用SQL State服务来存储viewstate,避免回发问题和页面大小。

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

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