Mark Clark
Mark Clark

Reputation: 177

In ASP with VB codebehind how do I present the user a yes/no dialog from VB

I have the following case where a user has selected a product, the product record has been retrieved and the backorder flag is set. I want to ask the user if the want to include it in the order anyway. I can't seem to find an exaample anywhere that demonstrates it in an IF statement.

My VB Code Snippet:

    Dim backorder = myDataTable.Rows(0)("backorder").ToString()
    If backorder = "True" And <somehow ask user it they want to order anyway> Then
       'do something
    End If

My Javascript in aspx file:

    <script type = "text/javascript">
     function Confirm() {
         var confirm_value = document.createElement("INPUT");
         confirm_value.type = "hidden";
         confirm_value.name = "confirm_value";
         if (confirm("Selected item is on temporary back order. Do yuou want to include it on this order?")) {
             confirm_value.value = "Yes";
         } else {
             confirm_value.value = "No";
         }
         document.forms[0].appendChild(confirm_value);
     }
</script>

I can read the variable being added, by javascript, to the page from VB, but can't figure how to call the javascript in order to prompt the user. For some reason I can't get my head around this. Please advise with example.

Upvotes: 1

Views: 547

Answers (2)

Mark Clark
Mark Clark

Reputation: 177

I hate answering my own question but this what finally worked. Mixture of mjw's answer and more research on my javasvript attempt. Rather than have JS create the hidden field, I added it to the HTML

    <asp:HiddenField  runat="server" id ="confirm_value"/>

New VB:

    If myDataTableFrame.Rows.Count > 0 Then
                Dim backorder = myDataTableFrame.Rows(0)("backorder").ToString()
                If backorder = "True" And confirm_value.Value <> "Yes" Then
                    Dim cs As ClientScriptManager = Page.ClientScript
                    ' Check to see if the startup script is already registered.
                    If (Not cs.IsStartupScriptRegistered(Me.GetType(), "ConfirmScript")) Then
                        Dim cstext1 As String = "Confirm();"
                        cs.RegisterStartupScript(Me.GetType(), "ConfirmScript", "Confirm();", True)
                    End If
                    Return
                Else
                    confirm_value.Value = "No"
                    ...

New Javascript: See ASP.NET set hiddenfield a value in Javascript Also added a reclick of the button if they answered "OK"

<script type = "text/javascript">
     function Confirm() {
         if (confirm("Selected item is on temporary back order. If you want to include it on this order click OK, then resubmit it?")) {
          //had to resort to this to find hidden field rather than document.getElementById('confirm_value')
             var x = document.getElementById('<%= confirm_value.ClientID%>');
             x.value = 'Yes';
             //re-click the button
             document.getElementById('<%=bttnadd.ClientID%>').click();
         } else {
             var x = document.getElementById('<%= confirm_value.ClientID%>');
             x.value = 'No';
         }
     }
</script>

Upvotes: 0

mjw
mjw

Reputation: 1206

Use the RegisterStartupScript method:

Sub ProcessOrder()

    'Your code to process the selected products here...
    Dim orderAnyway As string = hdnConfirmResponse.Value.Trim()
    If selectedItem.BackOrdered Then            
        If orderAnyway = "" Then
            Dim cs As ClientScriptManager = Page.ClientScript

            ' Define the name and type of the client scripts on the page.
            Dim csname1 As String = "ConfirmScript"
            Dim cstype As Type = Me.GetType()

            ' Check to see if the startup script is already registered.
            If (Not cs.IsStartupScriptRegistered(cstype, csname1)) Then
                Dim cstext1 As String = "Confirm();"
                cs.RegisterStartupScript(cstype, csname1, cstext1, True)
            End If
        Else
           If orderAnyway = "yes" Then 
               'ADD THE BACKORDERED ITEM SINCE THEY CONFIRMED 
           End If 
        End If
    End If

End Sub

Upvotes: 1

Related Questions