Javascript 什么';如果没有';直到代码隐藏完成后才显示?

Javascript 什么';如果没有';直到代码隐藏完成后才显示?,javascript,asp.net,client-server,code-behind,confirm,Javascript,Asp.net,Client Server,Code Behind,Confirm,我试图用javascript确认消息验证textbox值。如果用户单击“确定”,则我希望文本框值添加到列表框中,但如果用户单击“取消”,则我希望清除文本框,而不是将其添加到列表中。这在桌面应用程序中非常简单,但我正在尝试创建一个web应用程序,我已经为此奋斗了数周 在textbox.textchanged事件中,我有一段代码,它首先检查以确保该值不在列表中(PublicCalls.ListContainsIndex),然后搜索一个表以确保该值未被标记为已计数(brlCounted)。如果已经计算

我试图用javascript确认消息验证textbox值。如果用户单击“确定”,则我希望文本框值添加到列表框中,但如果用户单击“取消”,则我希望清除文本框,而不是将其添加到列表中。这在桌面应用程序中非常简单,但我正在尝试创建一个web应用程序,我已经为此奋斗了数周

在textbox.textchanged事件中,我有一段代码,它首先检查以确保该值不在列表中(PublicCalls.ListContainsIndex),然后搜索一个表以确保该值未被标记为已计数(brlCounted)。如果已经计算过,用户应得到提示,询问是否要继续重新计算该值或跳过该值:

    Protected Sub txtBrlKey_TextChanged(sender As Object, e As EventArgs) Handles txtBrlKey.TextChanged
    Dim tmpBarrels As New cBarrels

    Try
        With Me
            If Trim(.txtBrlKey.Text) <> "" Then
                If Not PublicCalls.ListContainsIndex(Me, .lstBarrels, .txtBrlKey.Text) > -1 Then
                    If Me.Title = "frmBarrelMoves" And (PublicCalls.gPhysicalInventory Or PublicCalls.gCycleCount) Then ' called from the Physical Inventory or Cycle Count form (frmBarremMoves)
                        tmpBarrels = tmpBarrels.Search(Me, "spa_Barrel_Select '" & .txtBrlKey.Text & "'")
                        If LCase(tmpBarrels.item(1).BrlCounted) = LCase("Y") Then
                            If PublicCalls.MsgBoxConfirm(Me, "This Barrel ID has already been counted. Continue?") = False Then
                                txtBrlKey.Text = "" ' clear the control 
                            Else
                                gBarrelEntered = True
                                UpdateBarrelList("I", .txtBrlKey.Text) ' add the barrel to the barrel list
                                gBarrelEntered = False

                            End If
                        End If
                    End If
                End If
            End If
        End With

        tmpBarrels = Nothing

    Catch ex As Exception
        PublicCalls.DisplayBblErrors(Me, ex, Nothing)
    End Try
End Sub
javascript(在Site.Master标题中)如下所示:

    Public Shared Function MsgBoxConfirm(thePage As Page, Message As String) As Boolean
    Dim HiddenConfirmResponse As HiddenField = CType(thePage.Master.FindControl("txtConfirmResponse"), HiddenField)

    MsgBoxConfirm = False
    HiddenConfirmResponse.Value = ""

    ' somehow this function needs to return true or false depending on if the user clicked OK or Cancel
    ' the problem is that ConfirmBox fires after the server side code finishes, which is too late to capture the OK or Cancel response here

    Try
        thePage.ClientScript.RegisterStartupScript(thePage.[GetType](), "ConfirmBox", (Convert.ToString("ConfirmBox('") & Message) + "');", True)

        If HiddenConfirmResponse.Value = "OK" Then
            MsgBoxConfirm = True
        End If

    Catch ex As Exception
        PublicCalls.DisplayBblErrors(thePage, ex, Nothing)
    End Try

End Function
    <script type="text/javascript">
        function ConfirmBox(message) {

            var Answer = confirm(message);

            if (Answer) {

                document.getElementById('<%=txtConfirmResponse.ClientID%>').value = "OK";

            } else {

                document.getElementById('<%=txtConfirmResponse.ClientID%>').value = "Cancel";
            }
        }
</script>

功能确认框(消息){
var应答=确认(消息);
若有(答复){
document.getElementById(“”).value=“确定”;
}否则{
document.getElementById(“”).value=“取消”;
}
}
隐藏的txtConfirmResponse在主体中定义:

            <asp:HiddenField ID="txtConfirmResponse" runat="server" />

当确认框出现时,隐藏的代码已经移动,并且由于MsgBoxConfirm默认返回false,因此该值永远不会添加到列表中。如果我将默认值更改为True,则无论发生什么情况,该值始终添加到列表中。我搜索了又搜索,一致认为客户端代码和服务器端代码之间的分离是原因,并且在需要时,在将值添加到列表之前,我无法显示确认框。如果是这样的话,那么我看不出确认框有什么用处。我看到的回答是,“用不同的方式做”,但怎么做呢?有谁能提供一个明确的例子,说明我需要如何更改此代码才能使其正常工作?我尝试过Ajax ModalPopupXtender,但在显示确认框时没有任何区别

非常沮丧。谢谢你能提供的帮助。
Gina

您尝试过使用AJAX吗?是的,我尝试过ModalPopupXtender,但在确认框出现的时间上没有任何区别——总是太晚了。