我有一个Asp.Net 4.0网站/控制界面,它使用更新面板和一些按钮.更新面板连接到每5秒执行一次的计时器,导致部分回发.按钮切换一些设置,然后通过类似于此的调用强制更新更新面板:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._doPostBack('<%= UpdatePanel.ClientID %>', '');
return true;
Run Code Online (Sandbox Code Playgroud)
该网站在IE/Firefox和Safari移动设备(IPhone/IPad)上运行良好,但在移动设备上,回发随机且无声地停止工作.我认为这可能与节省电池有关,并且safari在空闲时关闭部分回发.问题是,当用户返回站点时,回发完全关闭,计时器和按钮都不再导致任何回发.(我已监控服务器上的网络流量以验证这一点).即使用户刷新网站(多次),部分回发也会重新发挥作用.它只是停止向服务器发布数据.然后突然,并且没有特别的原因,回发开始再次工作.停机时间通常长达10分钟,这完全使我的网站无法用于其目的.
鉴于在回发开始之前需要很长时间,我想知道在客户端或IIS中是否有任何设置可以使用?
该网站将仅在我的客户设备上运行,而不是公开的,所以如果在客户端上有任何设置可以使用,我就是为了它.
我真的对此感到困惑,并没有找到触发"bug"的方法,它有时会发生.任何建议和提示非常感谢.
更新:
添加了一些错误处理,并且在回发失败时我(不一致)收到以下消息:
该页面正在执行异步回发,但ScriptManager.SupportParialRendering属性设置为false.确保在回发期间将属性设置为true.
很可能这个属性对于第一个实例中的设备显然是正确的,否则回发将永远不会工作,但实际情况并非如此.
更新2:找到以下博客文章,建议更改web.config中的browserCap设置.现在试试这个.会报告回来.其他建议仍然受到欢迎. ASP.NET 4 BrowserCaps(或者:他们在想什么?)
以上在全屏模式下(从主屏幕运行)禁用safari mobile中的javascript.以下文章建议修复此问题. 问题:iPad与ASP.NET
********************编辑2**********************我想出了问题所在. ..但我不喜欢这个含义.我之前正在测试我们的iPhone目标移动应用程序,并使用插件将Firefox的用户代理字符串屏蔽为iPhone.
.Net实际上并没有根据这条信息生成所需的回发代码.
我不喜欢这样,因为iPhone和其他多媒体设备可以解释javascript,ASP.net打破任何依赖服务器生成的javascript运行的应用程序.
所以,如果社区允许它...我想将我的官方问题改为......为什么ASP.net不会为特定浏览器生成javascript,以及如何关闭此"功能".
***************结束编辑2***************
我有一个奇怪的问题.我将远程主机上的一些工作代码复制到我的计算机上.当我尝试使用该页面时,我收到了一个javascript错误
__doPostBack is not defined
javascript:__doPostBack('ctl00$ContentPlaceHolder1$login','')()()
Run Code Online (Sandbox Code Playgroud)
当我输出页面源很少时,确实没有服务器端生成的javascript.
我尝试创建一个简单的页面:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="jsTest.aspx.vb" Inherits="_jsTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="tbTest" runat="server"></asp:TextBox><br />
<asp:LinkButton ID="linkTest" runat="server">LinkButton</asp:LinkButton>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
Partial Class _jsTest
Inherits System.Web.UI.Page
Protected Sub linkTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles linkTest.Click
Response.Write(tbTest.Text)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
得到同样的错误.
我尝试重新启动(嘿,它的工作时间有一半),清除了App_Code,global.asax和web.config中的所有内容,添加了一个带有autopostback = true的文本框...我没有想法.
任何人都可以了解这里发生的事情吗?
**************更多信息**************我刚刚在IE中尝试了一切,它按预期工作,页面源显示:
<input type="hidden" …Run Code Online (Sandbox Code Playgroud) 我们昨天得到了奇怪的错误.___doPostBack未定义.
我们正在构建相当高级的网站,但不是很多使用回发.使用回发的地方之一是ASP.NET登录状态控件.
它是概率性的,有时它被渲染,有时 - 不是.对于IE浏览器,它的工作原理很好,但是从FireFox可以很高的机会不在页面源中使用doPostBack.
有任何想法吗?
PS:此外,错误仅发生在使用Windows 2003和IIS 5.0的实时环境中,dotnet框架为3.5
是不是因为我在页面级别上使用OutputCache?