ASP.NET 视图状态使 iPad 浏览器崩溃

Posted

技术标签:

【中文标题】ASP.NET 视图状态使 iPad 浏览器崩溃【英文标题】:ASP.NET viewstate crashes iPad browser 【发布时间】:2011-07-05 23:22:36 【问题描述】:

我正在处理的一个站点有一个 ASP.NET 网络表单页面,该页面回发并有大约 88KB 的未压缩 ViewState。是的,我意识到这是很多 ViewState。我观察到任何回发都会导致 iPad 浏览器崩溃并转到 iPad 主屏幕。页面上的任何其他链接都可以正常工作。回帖在 iPhone 4 上也可以正常工作。当我将页面上的 ViewState 减少到大约 48KB 时,崩溃问题就消失了。

这是我发现http://www.devcomments.com/GWT-Obfuscation-crashes-iPad-Safari-browser-at1047668.htm 唯一与此问题类似的参考,尽管它不是参考 GWT 也不是 ViewState。

是否存在与此问题相关的某些特定限制,或者它只是 iPad 浏览器的一个未记录的错误?

编辑: 在 iPad 上玩了一些时间并在网上阅读了一些东西之后,如果觉得 Safari 存在滥用行为,操作系统似乎会关闭 Safari。操作系统要么认为 Safari 使用了过多的 RAM 或过多的 CPU,我不确定在这个 Viewstate 问题的情况下是哪一个。我是另一个崩溃问题,根本没有 Viewstate,但在一个小的 XHR 之后经常发生崩溃,似乎是在一些 javascript 运行时,但很难分辨。在第二种情况下,禁用 Javascript 可以防止 Safari 崩溃,但也会使页面无用。

所以我想我的问题仍然是 iPad 1 Safari 中的实际限制是什么,人们如何针对这些崩溃限制进行测试?

【问题讨论】:

【参考方案1】:

这听起来确实像是 iPad 上 Safari 中的一个错误。

也就是说,这是一个非常多的视图状态。你真的需要它吗?

在我看来,一个大错误是 MS 决定默认启用所有视图状态。这意味着如果您在回发中更改文本框的背景颜色,控件随后会“记住”它是新的背景颜色,而无需您做任何事情来实现它。不那么粗略地说,这意味着您获得了一个更像 Windows 窗体应用程序的编程模型,而且对于开发人员来说,这一切都非常容易。

但要付出代价。 Web 应用程序是客户端-服务器应用程序。它与本地运行的应用有着根本的不同,也许编程模型真的不应该在这两种情况下都是一样的......

如果您不知道是否真的需要视图状态,请尝试为整个页面禁用它。如果您发现某些特定控件需要它,请为所有其他控件禁用它,为必须拥有它的控件启用它,然后再次为页面启用它。我认为您会发现大部分(如果不是全部)您的大量视图状态实际上并没有被使用——除了消耗带宽之外的任何其他用途。

【讨论】:

+1。没有充分的理由拥有 100K 的 ViewState。由于 ViewState,WebForms 名声不佳。它与其他任何工具一样,可能会被滥用,但默认启用它会导致一代网络开发人员和网站做出错误的设计决策。【参考方案2】:

问题在于,当发布的表单内容过多时,例如巨大的 Viewstate,Safari 会因使用过多资源或未及时响应而被 ios 关闭。我不是 iOS 专家,但它不是特定的 Viewstate 问题,它通常是 iOS/Safari 问题。

【讨论】:

【参考方案3】:

我认为是时候使用 jQuery AJAX 切换到 ASP.Net MVC。

【讨论】:

以上是关于ASP.NET 视图状态使 iPad 浏览器崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Ipad上传的图像在asp.net c#中的所有浏览器中显示桌面旋转90度

asp.net中如何使控件内容在本页面跳转不刷新

如何在回发 ASP.Net Core 后保持选项卡处于活动状态

ASP.NET Session详解

iPhone iPad 未检测到 ASP.Net MVC 应用程序中的浏览器类型

视图状态 MAC 的 Asp.net 验证失败