ManiLancer Ответов: 3

Подтверждение на стороне сервера с использованием javascript и VB


Если я нажму кнопку Да он вернет нет

Он возвращает значение первого щелчка при моем втором щелчке ,

если я нажимаю да в первый раз,он возвращает нет, и я нажимаю второй раз нет, он возвращает мое первое значение да..

Что я уже пробовал:

function Confirm() {
             var confirm_value = document.createElement("INPUT");
             confirm_value.type = "hidden";
             confirm_value.name = "confirm_value";
             if (confirm("Do you want to Delete data?")) {
                 confirm_value.value = "Yes";
             } else {
                 confirm_value.value = "No";
             }
             document.forms[0].appendChild(confirm_value);
         }

VB КОД
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, GetType(Page), "Script", "Confirm();", True)

        Dim confirmValue As String = Request.Form("confirm_value")
        If confirmValue = "Yes" Then

            Response.Write("User Clicked yes")
        Else
            Response.Write("User Clicked No")
        End If

3 Ответов

Рейтинг:
4

ManiLancer

Этот код работает нормально

function Confirm() {
    var confirm_value = document.createElement("INPUT");
    confirm_value.type = "hidden";
    confirm_value.name = "confirm_value";
    if (confirm("Do you want to Delete data?")) {
        confirm_value.value = "Yes";
    } else {
        confirm_value.value = "No";
    }
    document.forms[0].appendChild(confirm_value);
}

<asp:Button ID="Button1" OnClientClick="Confirm()" runat="server"  Text="Button"/>

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       
    Button1.OnClientClick = "return Confirm();"

    Dim confirmValue As String
    confirmValue = Request.Form("confirm_value")

    If confirmValue = "Yes" Then
        Response.Write("User Clicked yes")
    Else
        Response.Write("User Clicked No")
    End If

End Sub


Рейтинг:
1

ZurdoDev

Подход здесь неправильный. Если вы хотите подтвердить, что пользователь что-то делает, сделайте что-то подобное в JavaScript:

function ConfirmDelete(){
return confirm("Do you want to Delete data?"); // this means that the function will either return true or false depending on what user clicks.
}


Затем в стороне ASPX на вашей кнопке вы делаете это:
<aspButton id="btnConfirm" Text="Confirm" OnClientClick="return ConfirmDelete();" OnClick="btnClick" />


Добавляя OnClientClick к вашей кнопке, а затем возвращая значение из ConfirmDelete (), если пользователь нажмет кнопку Cancel в диалоговом окне Confirm, будет возвращено значение false, а OnClientClick вернет значение false, которое предотвратит запуск кнопки postback и кода на стороне сервера. Если пользователь нажимает OK в диалоговом окне подтверждения, то возвращается true и выполняется код на стороне сервера.


Karthik_Mahalingam

5

Рейтинг:
1

F-ES Sitecore

На этот вопрос трудно ответить, так как мы не знаем контекста, в котором выполняется VB-код. Это в загрузке страницы? Или где-то еще?

Ваша проблема, вероятно, проистекает из недоразумения, что RegisterClientScriptBlock каким-то образом запускает ваш javascript в коде позади и что ваш .net-код работает внутри браузера и ждет вашего ввода, а затем выполняет вашу строку "если" после того, как вы нажмете подтверждение в браузере. Ну, ничего из этого не происходит.

Что делает RegisterClientScriptBlock, так это добавляет этот javascript к выходным данным, так что когда весь ваш .net-код выполнен и весь html был построен, этот html затем отправляется в браузер, и именно тогда запускается javascript.

System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, GetType(Page), "Script", "Confirm();", True)
' after executing the line above your .net code continues running

Dim confirmValue As String = Request.Form("confirm_value")

' there is no confirm_value in the request so confirmValue will be ""

If confirmValue = "Yes" Then

Response.Write("User Clicked yes")
Else
Response.Write("User Clicked No")
End If

' now that your .net code has finished building html to send to the client, that
' html is sent and the browser then runs your js and the confirm box appears


ManiLancer

я хочу запустить его в событии нажатия кнопки, OnClientClick= "return Confirm ()" не будет работать для моего сценария,я хочу вызвать функцию только из кода позади

ZurdoDev

OnClientClick-это правильный способ сделать это. Почему это не сработает для вас?

ManiLancer

вы правы, но я хочу, чтобы он использовал код позади..

F-ES Sitecore

- Позвонить кому?

ManiLancer

Функция Javascript "Подтвердить()"

ManiLancer

я представил свое решение ,оно работает нормально

F-ES Sitecore

Вы не можете вызвать javascript из серверного кода. Серверный код-это .net, и он работает на сервере, этот код генерирует html (в данном случае со встроенным javascript), и как только весь .net-код закончен, html передается браузеру, а js выполняется в браузере.

ZurdoDev

Но почему?