我们有一个.NET 4.0 WebForms应用程序。一个页面有一个包含一些UpdatePanel控件的HtmlButton。当服务器在.NET 4.0上运行时,这是正确的。
当服务器升级到4.5时,我们注意到单击按钮会挂起浏览器。旋转器会显示出来,用户的会话基本上是被锁定的,直到调用超时。
在浏览器开发工具(F12)的“网络”选项卡中,我们观察到:
对运行.Net 4.0的服务器执行相同的观察显示了类似的双调用,但在任何情况下第二次调用都没有挂起。
我通过创建一个新的默认.Net 4.5 WebForms应用程序来重新创建这种双重调用行为(除了挂起的第二次调用),其中包含一个UpdatePanel、一个文字和一个HtmlButton,如下所示:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Literal ID="myliteral" runat="server"></asp:Literal>
<button id="htmlbtn" runat="server" OnServerClick="htmlbtn_Click"></button>
</ContentTemplate>
</asp:UpdatePanel>ServerClick事件只是将当前时间放在文字中。
这重新创建了双帖子行为。我还尝试使用其他类型的按钮,例如ImageButton,它们只正确地发出一个呼叫。
有人知道这是怎么回事吗?有什么方法可以避免使用HtmlButton的双帖子吗?我假设这两个电话与挂起的第二个电话有关,但这可能是一个错误的假设。
发布于 2013-07-24 07:25:57
结果是,对于每个未被重新绑定的部分页面请求,它们都会进行一些jQuery绑定。
在jQuery的$(document).ready()期间,我设置了到各种元素的绑定。在UpdatePanels引起的部分回发过程中调用此函数。因此,在某些情况下,我需要做的是在再次设置绑定之前执行如下操作:$('#ctrl').unbind();(可能有一种方法来检查绑定是否存在,并且只在必要时添加绑定。)
此外,页面上还有一个使用jQuery自动调整大小插件的文本区域。初始化时,插件在页面之外添加一个克隆文本区域,用于计算文本高度。在每个部分页面更新中,正在创建一个新的文本区域。使用Chrome的dev工具可以发现这个问题,因为我可以看到DOM实时变化。我添加了一些脚本来检查这些现有的文本区域并清理它们。
https://stackoverflow.com/questions/17747189
复制相似问题