我有一个使用更新面板和一些按钮的Asp.Net 4.0网站/控制界面。更新面板连接到一个定时器,每5秒执行一次,导致部分回发。这些按钮切换一些设置,然后通过类似于以下调用强制更新更新面板:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._doPostBack('<%= UpdatePanel.ClientID %>', '');
return true;
该网站在IE/Firefox上运行良好,在Safari移动设备(iPhone/iPad)上也能正常运行,但在移动设备上,提交回发(postback)会随机而又无声地停止工作。我认为这可能与节省电池有关,当Safari处于空闲状态时,它会关闭部分的提交回发(postback)。问题在于,当用户返回网站时,提交回发(postback)完全关闭,并且定时器和按钮都不再引起任何提交回发(postback)。(我已经监控了服务器上的网络流量以验证这一点)。即使用户多次刷新网站,部分提交回发(postback)也不再起作用,它只是停止向服务器发送数据。然后,突然间,没有任何特定的原因,提交回发(postback)又开始工作了。这种停机时间通常长达10分钟,这完全使我的网站失去了其目的。
考虑到提交回发(postback)需要很长时间才能重新开始工作,我想知道是否有任何客户端或IIS方面的设置可以进行调整?
该网站仅在我的客户设备上运行,不对外公开,因此如果客户端有任何设置可以调整,我愿意尝试。
我真的对此感到困惑,还没有找到触发“错误”的方法,它只是偶尔发生。任何建议和提示都将不胜感激。
更新:
增加了一些错误处理,当回发失败时,我(不是一致地)收到以下消息:
该页面正在执行异步回发,但 ScriptManager.SupportPartialRendering 属性设置为 false。请确保在回发期间将属性设置为 true。
很奇怪的是,在第一种情况下,该属性显然为 true,否则回发永远不会起作用,这并非事实。
更新2: 发现以下博客文章建议在web.config中更改browserCap设置。正在尝试此方法。将会回报结果。仍然欢迎其他建议。 ASP.NET 4 BrowserCaps(或:他们在想什么?) 以上操作会在Safari移动版全屏模式下禁用JavaScript(从主屏幕运行)。以下文章提供了解决此问题的方法。 Gotcha:iPad与ASP.NET
<browserCaps userAgentCacheKeyLength="256" />
解决了它。非常感激!我还没有将其放在Page_PreInit
部分,这能够仅仅放在 MasterPage 上以适用于所有页面吗? - Mark Pieszak - Trilon.ioPage_PreInit
放在母版页上会使得你不必将其复制/粘贴到每个子页面上。 - Mark Pieszak - Trilon.io