Javascript 意外及;通过检查样式属性,在ASP.NET按钮单击处理程序中神秘地阻止了WCF服务调用错误

Javascript 意外及;通过检查样式属性,在ASP.NET按钮单击处理程序中神秘地阻止了WCF服务调用错误,javascript,asp.net,wcf,asp.net-ajax,handler,Javascript,Asp.net,Wcf,Asp.net Ajax,Handler,我有两个奇怪的工作流程,我可以修复。。我只是简单地检查ASP.NET代码中的一个样式,意外地修复了它们。我想听听你关于为什么会发生这种情况的理论。我有一些自己的想法,但如果我告诉你我的理论,我不想让你在读这篇文章时有任何成见 设置: Private Sub SaveCancelDeleteButtonClick(ByVal sender As Object, ByVal e As SaveCancelDelete.DynamicButtonEventArgs) Handles SaveC

我有两个奇怪的工作流程,我可以修复。。我只是简单地检查ASP.NET代码中的一个样式,意外地修复了它们。我想听听你关于为什么会发生这种情况的理论。我有一些自己的想法,但如果我告诉你我的理论,我不想让你在读这篇文章时有任何成见

设置:

    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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
因此,我在ASP.NET页面上有一个按钮(下面是各种代码片段中的事件代码),用于提交我的表单。有两个工作流会导致问题。在每个工作流中,都会进行WCF服务调用。WCF服务调用在调用时将CSS可见性属性设置为“可见”。响应JavaScript函数将可见性属性更改回“隐藏”

在这两个工作流中,提交我的表单的按钮被按下得太快,WCF调用永远不会返回,WCF服务出错。表单已经提交,一切都很完美(因为WCF调用从未改变表单中的任何内容),只是我得到了错误。解决此问题的更好方法是在WCF服务调用发生时禁用按钮,这正是我使AJAX微调器可见和隐藏的原因。但现在,我正在通过检查样式来解决问题,以了解ASP.NET、浏览器和JavaScript的黑匣子,以及ASP.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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
当我运行此代码时,我没有收到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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
当我运行此代码时,我没有收到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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
当我调试时,这个样式总是隐藏在这两个工作流中(显然在最后两个代码段中,因为我在第一个代码段中没有样式代码)。我有一些理论,但我想听听你们关于为什么会发生这种情况的理论

==========

理想情况下,我应该在WCF调用期间灰显按钮,但这只是一个理论问题

仅供参考:JavaScript正在更改可见性,而不是ASP.NET代码

AJAX微调器:

    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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
=============

2011年8月24日下午1:27更新 当我运行此代码时,我得到了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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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
当我运行此代码时,我得到了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
    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
    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
<asp:Image ID="ImageAjaxSpinner" runat="server" ImageUrl="~/images/ajax-spinner.gif" style="position:absolute; top:0px; right:0px; visibility:hidden;" AlternateText="spinner" />
PreAccessioningLoadError: function(sender) {

    jQuery(this.Elements.ImageAjaxSpinner).css("visibility", "hidden");
    alert("error");  
    return false;
},
        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
    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服务响应返回之前,我将禁用按钮,因此最终用户在数据出现之前无法单击按钮。

您的问题没有多大意义。您不断提到WCF错误,但尚未发布该错误。另外,您说“WCF服务调用在调用时将CSS可见性属性设置为“可见”;WCF服务调用不能更改您的页面。您应该发布
ValidatePage()
的功能。在我发布的所有情况下,ValidatePage()都将返回true(表示没有错误)。发生WCF错误是因为在WCF服务方法的服务器端引发了异常。我会弄清楚例外情况到底是什么。奇怪的是,如果页面加载了它的所有数据,它就不会抛出异常,因此看起来必要的数据(从JavaScript WCF AJAX调用转到C#)没有被传递,因为页面还没有加载字段中的数据。让我了解更多信息。