不小心,神秘地阻止了ASP中的WCF服务调用错误.. NET按钮单击处理程序通过检查样式属性
accidentally & mysteriously prevented WCF service call error in ASP.NET button click handler by checking style attribute
我有两个奇怪的工作流程,我能够修复…我通过简单地检查ASP中的样式意外地修复了它们。NET代码。我想听听你对为什么会发生这种情况的理论。我也有一些自己的观点,但如果我告诉你我的理论,我不想让你读到这篇文章时产生任何刻板印象。
设置:
所以我有一个按钮(事件代码下面的各种片段)在一个ASP。. NET页面提交我的表单。有两个工作流导致了问题。在每个工作流中,都会发出一个WCF服务调用。WCF服务调用在调用时将CSS可见性属性设置为"可见"。response JavaScript函数将visibility属性改回"hidden"。
在这两个工作流中,提交表单的按钮被按得太快,WCF调用永远不会返回,并且WCF服务出错。提交表单后,一切都很完美(因为WCF调用从未更改表单中的任何内容),只是我得到了错误。修复这个问题的一个更好的方法是在WCF服务调用发生时禁用按钮,这正是我将AJAX微调器设置为可见和隐藏的原因。但是现在,我正在通过检查样式来解决我的问题,以了解ASP的黑盒子。. NET,浏览器和JavaScript,以及它们是如何交互的。. NET检查样式。
当我运行这段代码时,我得到了WCF错误:
Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveCancelDelete.CustomButtonClick
Dim valid As Boolean = ValidatePage()
Trace.Write(String.Format("Caught a button with event {0}", e.EventName))
... continued
当我运行这段代码时,我没有得到WCF错误:
Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveCancelDelete.CustomButtonClick
Dim x As String = ImageAjaxSpinner.Style("visibility")
Dim valid As Boolean = ValidatePage()
Trace.Write(String.Format("Caught a button with event {0}", e.EventName))
... continued
当我运行这段代码时,我没有得到WCF错误:
Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveCancelDelete.CustomButtonClick
If ImageAjaxSpinner.Style("visibility") = "visible" Then
Return
End If
Dim valid As Boolean = ValidatePage()
Trace.Write(String.Format("Caught a button with event {0}", e.EventName))
... continued
当我调试时,这个样式总是隐藏在这两个工作流中(显然在最后2个片段中,因为我没有第一个片段中的样式代码)。我有几个理论,但我想听听你的理论,为什么会发生这种情况。
==========
理想情况下,我应该在WCF调用期间使按钮变灰,但这仅仅是一个理论问题。
仅供参考:JavaScript正在改变可见性,而不是ASP。NET代码。
AJAX转轮:<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
JavaScript伪类WCF web服务错误函数代码片段:
PreAccessioningLoadError: function(sender) {
jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
alert("error");
return false;
},
=============
2011年8月24日1:27pm更新
当我运行这段代码时,我得到了WCF错误:
Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveCancelDelete.CustomButtonClick
If ImageAjaxSpinner.Visible = True Then
Return
End If
Dim valid As Boolean = ValidatePage()
Trace.Write(String.Format("Caught a button with event {0}", e.EventName))
... continued
当我运行这段代码时,我得到了WCF错误:
Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveCancelDelete.CustomButtonClick
' D-02568 - fixed
'If ImageAjaxSpinner.Style("visibility") = "visible" Then
' Return
'End If
' D-02568 - fixed
'Dim x As String = ImageAjaxSpinner.Style("visibility")
' D-02568 - not fixed; throws WCF error
'If ImageAjaxSpinner.Visible = True Then
' Return
'End If
' D-02568 - not fixed; throws WCF error
Dim x As Boolean = ImageAjaxSpinner.Visible
Dim valid As Boolean = ValidatePage()
Trace.Write(String.Format("Caught a button with event {0}", e.EventName))
... continued
这似乎是发生在Mozilla Firefox黑盒中的一件神秘的事情,并且有效。它并不适用于所有浏览器,所以我根本不依赖于这段代码!除非Mozilla Firefox浏览器的开发人员可以回答我的问题,否则我不会在这里更改我的答案。在WCF服务响应返回之前,我将禁用按钮,因此最终用户在数据存在之前无法单击按钮。
- 将参数传递给reactjs单击处理程序
- 元素单击处理程序由一个神秘的函数取消设置
- 将单击处理程序附加到动态生成的锚标记
- 为什么在模糊事件处理程序中添加setTimeout会修复“;掩蔽”;另一个单击处理程序的
- 使用运行时创建的链接来触发ASP.Net中隐藏按钮的单击处理程序
- 将单击处理程序绑定到动态元素
- 在另一个C#按钮单击处理程序之前,从OnClientClick函数调用C#按钮处理程序
- 如何通过单击处理程序进行导航
- 触摸事件处理程序将覆盖单击处理程序
- 将单击处理程序设置为动态创建的按钮
- 插入内容后,Iframe 中的单击处理程序不起作用
- OL3 是否有单击处理程序像素容差设置
- 将单击处理程序绑定到除特定 HTML 标记之外的所有元素
- 在 vis 中访问节点数据.js单击处理程序
- 在 Javascript 中启用/禁用按钮单击处理程序
- 如何在单击处理程序中使用反应路由器 1.0.x 进行客户端路由
- 为什么列表视图单击处理程序在启动时执行函数
- 来自 setTimeout 的 Jquery 单击处理程序
- 更改 jQuery 单击处理程序功能
- 使用单击处理程序时出现“系统未定义”JavaScript 错误