我有几个C#.Net Webforms应用程序偶尔会开发一个相当大的视图状态。在过去,使用iOS 6,我遇到了Safari在post-back上截断视图状态的问题,导致应用程序抛出异常。所有其他浏览器当然不受影响。我可以重现这个问题,但并不总是可靠的。关于iOS 6下的Safari是否在32k标记或64k标记之后砍掉帖子参数,我发现了相互矛盾的意见。将视图状态分成块也确实有帮助。作为一个整体的帖子的大小是重要的。
官方规格似乎是一个谜。也许iOS 7的变化可能会发生变化。 是否有人知道此限制是否仍然存在以及它是什么?
我正在考虑重写我继承的应用程序中的许多页面,并试图弄清楚我需要多么小的保持我的视图状态才能使iPad和iPhone用户满意。当然它们可以在MVC中重写,但这需要更多的努力。
答案 0 :(得分:1)
它在.NET中设置了一个页面来测试它。它包含一个按钮,向Viewstate添加1K垃圾,然后以字节为单位打印出当前大小。我可以在iOS 6和7的Safari中将视图状态增加到超过100K而没有任何不良影响。无论我是否将viewstate设置为使用maxPageStateFieldLength将其自身分解为更小的块,这都是相同的。
但是,我仍然可以通过大量使用浏览器后退按钮让页面在iOS 6下抛出无效的viewstate异常。这可能是由于Safari移动过于积极地缓存和使用旧请求。这个特定的错误似乎已经在iOS 7中得到了缓解。现在它在某些情况下会弹出一个对话框,询问您是否要重新提交页面。然后不会触发错误的视图状态错误。
所以看来请求大小本身没有限制。需要结合使用此因素和其他因素来触发Safari mobile和.Net下的无效视图状态异常。