0

我有几个 C#.Net Webforms 应用程序,它们偶尔会开发出相当大的视图状态。过去,在 iOS 6 中,我遇到了 Safari 在回发时截断视图状态的问题,导致应用程序抛出异常。当然,所有其他浏览器都不受影响。我可以重现该问题,但并不总是可靠。关于 iOS 6 下的 Safari 是在 32k 标记还是 64k 标记之后切断帖子参数,我发现了相互矛盾的意见。将视图状态分成块也有帮助。整个帖子的大小很重要。

官方规格似乎是一个谜。不过,也许 iOS 7 改变了。有谁知道这个限制是否仍然存在以及它是什么?

我正在考虑重写我继承的应用程序中的许多页面,并试图弄清楚我需要多小才能保持我的视图状态以使 iPad 和 iPhone 用户满意。当然,它们可以用 MVC 重写,但这需要付出更多的努力。

4

1 回答 1

1

它在 .NET 中设置了一个页面来对此进行测试。它包含一个向 Viewstate 添加 1K 垃圾的按钮,然后打印出它的当前大小(以字节为单位)。我能够在 iOS 6 和 7 上的 Safari 中将视图状态增加到 100K 以上,而没有任何不良影响。无论我是否将 viewstate 设置为使用 maxPageStateFieldLength 将自身分解为更小的块,这都是相同的。

但是,我仍然能够让页面在 iOS 6 下通过大量使用浏览器后退按钮来引发无效的视图状态异常。这可能是由于 Safari 移动版过于激进地缓存和使用旧请求。不过,这个特殊的错误似乎在 iOS 7 中得到了缓解。它现在在某些情况下会弹出一个对话框,询问您是否要重新提交页面。然后不会触发错误的视图状态错误。

因此,请求大小本身似乎没有限制。在 Safari 移动版和 .Net 下触发无效视图状态异常需要结合这些因素和其他因素。

于 2013-09-20T19:11:45.240 回答