Как обрабатывать подтверждение на стороне клиента в коде позади?

У меня есть проект vb.net, где мне нужно попросить пользователя подтвердить какое-то действие. Моя проблема в том, что прямо сейчас я могу показать диалоговое окно подтверждения пользователю, но не могу получить ответ в коде позади. Основано на этом сообщении Я могу показать диалоговое окно подтверждения и выполнить некоторые действия в соответствии с ответом, но проблема с этим решением заключается в том, что мне нужно показать в диалоговом окне список данных из базы данных, поэтому также должен обрабатываться код javascript, из кода программной части.

Вот мой код для отображения диалогового окна подтверждения

'myPage.aspx.vb
Private Sub ConfirmBox(ByVal message As String)
    Dim sb As New System.Text.StringBuilder()
    sb.Append("<script type = 'text/javascript'>")
    sb.Append("window.onload=function(){")
    sb.Append("var confirm_value = document.createElement(""INPUT"");")
    sb.Append("confirm_value.type = ""hidden"";")
    sb.Append("confirm_value.name = ""confirm_value"";")
    sb.Append("if (confirm("" " & message & " "")) {")
    sb.Append("confirm_value.value = ""Yes"";")
    sb.Append("} else {")
    sb.Append("confirm_value.value = ""No"";")
    sb.Append("}")
    sb.Append("document.forms[0].appendChild(confirm_value);")
    sb.Append("};")
    sb.Append("</script>")
    ClientScript.RegisterClientScriptBlock(Me.GetType(), "alert",   sb.ToString())
End Sub

Это показывает диалоговое окно и, основываясь на щелчке пользователя, вставляет скрытый ввод со значением, которое я ищу для получения, я могу получить это значение, как это string confirmValue = Request.Form["confirm_value"];. Но после того, как показано подтверждение, он немедленно запрашивает ответ, и, очевидно, пользователь еще ничего не нажал.

Итак, можете ли вы помочь мне получить подтверждение пользователя и сделать что-то на основе этого подтверждения?


person Yerko Palma    schedule 23.02.2015    source источник


Ответы (1)


Вы должны учитывать, где выполняется код и в каком порядке. Вы не можете напрямую получить значение из диалогового окна JavaScript confirm() в код позади. Вам нужно будет зафиксировать это значение в JavaScript, затем сохранить значение в скрытом поле, затем инициировать обратную передачу и прочитать его из формы.

Обычно, если вы хотите подтвердить, это происходит после нажатия кнопки, но до того, как будет выполнена обратная передача. И часто вы хотите отменить обратную передачу, если пользователь отказывается. Вы можете легко добиться этого, вернув значение из атрибута OnClientClick. Возвращаемое значение false отменит обратную передачу до ее начала.

<asp:Button runat="server" id="Btn1" OnClick="Btn1_Click" OnClientClick="return confirm('Are you sure you want to do this?')" Text="Click Me" />
person mason    schedule 23.02.2015
comment
Проблема в том, что код, который вы вставили, находится в файле .aspx, и мне нужно показать пользователю некоторые данные бэкенда, и я не знаю, смогу ли я подключиться к базе данных, сделать запрос, проверить результат, и покажите, что в диалоговом окне подтверждения для пользователя, который находится на внешнем интерфейсе - person Yerko Palma; 23.02.2015
comment
@YerkoPalma Итак, загрузите данные из серверной части на Page_Load. Почему вы все равно проверяете результаты запроса? Вы не должны вводить неверные данные в БД в первую очередь. - person mason; 23.02.2015
comment
Ну, я хотел бы использовать проверенные данные с самого начала, но я работаю со старой базой данных, где данные хранились до того, как потребовалась какая-либо проверка. Кроме того, это большой объем данных, поэтому я не знаю, будет ли эффективно загружать его с самого начала. - person Yerko Palma; 23.02.2015
comment
Пройдите и обновите все свои данные, чтобы они были действительными. Это должен быть разовый процесс. Затем сохраняйте только действительные данные в будущем. А пока, когда ваша страница загрузится, подтвердите все необходимые данные. - person mason; 23.02.2015