不小心,神秘地阻止了ASP中的WCF服务调用错误.. NET按钮单击处理程序通过检查样式属性

accidentally & mysteriously prevented WCF service call error in ASP.NET button click handler by checking style attribute

本文关键字:单击 处理 按钮 NET 错误 程序 属性 样式 检查 调用 服务      更新时间:2023-09-26

我有两个奇怪的工作流程,我能够修复…我通过简单地检查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服务响应返回之前,我将禁用按钮,因此最终用户在数据存在之前无法单击按钮。