В ASP с VB codebehind как представить пользователю диалог да / нет от VB

1

У меня есть следующий случай, когда пользователь выбрал продукт, была восстановлена запись продукта и установлен флаг отставания. Я хочу спросить пользователя, хотите ли вы включить его в заказ в любом случае. Кажется, я не могу найти exaample где-нибудь, что демонстрирует его в IF-заявлении.

Мой фрагмент кода VB:

    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

Мой Javascript в файле aspx:

    <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>

Я могу прочитать добавленную переменную javascript на странице из VB, но не могу понять, как вызвать javascript, чтобы вызвать пользователя. По какой-то причине я не могу обойти это. Просьба сообщить пример.

2 ответа

1

Используйте метод RegisterStartupScript:

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
  • 0
    Простите, что я плотный, но это регистрирует StartUpScript, как вы это называете в контексте моего оператора «IF»? Это, кажется, недостающий фрагмент в большинстве примеров, которые я видел.
  • 0
    Если вы не планируете изменить свои вызовы данных, вам необходимо знать, какие элементы упорядочены при первоначальной визуализации таблицы / таблицы данных в браузере. Этот код будет создавать клиентский скрипт, который будет выполнять Confirm() при загрузке страницы. Таким образом, если ваш текущий поток похож на ... Пользователь выбирает продукт и запускает обратную передачу, обратная передача получает значение флага невыполненного заказа, ТО, когда вы хотите как-то показать сообщение подтверждения, вы попадаете в место, где вам нужно 2 обратной передачи, чтобы выполнить то, что можно сделать за один раз, если вы изначально отправите этот флаг в таблицу.
Показать ещё 6 комментариев
0

Я ненавижу отвечать на свой вопрос, но это то, что в конечном итоге сработало. Смесь ответа mjw и больше исследований моей попытки javasvript. Вместо того, чтобы JS создавать скрытое поле, я добавил его в HTML

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

Новый 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"
                    ...

Новый Javascript: см. ASP.NET set hiddenfield значение в Javascript Также добавил повтор кнопки, если они ответили "ОК"

<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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню