Вызов функции VB.NET WebMethod из Javascript - PullRequest
2 голосов
/ 12 июля 2011

У меня есть функция VB.NET, которая выглядит следующим образом:

<WebMethod()> _
Public Shared Function AuthenticateUser(ByVal UserInfo As String, ByVal Password As String) As Boolean
    Dim UserName As String

    'Just in case
    AuthenticateUser = False

    'Extract the user name from the user info cookie string
    UserName = Globals.GetValueFromVBCookie("UserName", UserInfo)

    'Now validate the user
    If Globals.ValidateActiveDirectoryLogin("Backoffice", UserName, Password) Then
        AuthenticateUser = True
    End If

End Function

Я пытаюсь вызвать его из JavaScript следующим образом:

function DeleteBatchJS()
{if (confirm("Delete the ENTIRE batch and all of its contents? ALL work will be lost."))
     var authenticated = PageMethods.AuthenticateUser(get_cookie("UserInfo"), prompt("Please enter your password"))
     if (authenticated == true)
           {{var completed = PageMethods.DeleteBatchJSWM(get_cookie("UserInfo"));
            window.location = "BatchOperations.aspx";
            alert("Batch Deleted.");}}}

Вызывает функцию, но не возвращает значение. При просмотре кода моя функция VB срабатывает (она будет возвращать true, пока введен правильный пароль), но значение «authenticated» в javascript остается «undefined». Как будто вы не можете возвращать значения из функций VB в javascript.

Я тоже пробовал

if PageMethods.AuthenticateUser("UserName", "Password")
   {
     //Stuff
   }

Но все равно не повезло.

Что я делаю не так?

Спасибо

Jason

1 Ответ

4 голосов
/ 12 июля 2011

Веб-методы вызываются с использованием AJAX, то есть асинхронно, т. Е. Вы должны ждать завершения метода, прежде чем использовать результаты, т. Е. Вы должны использовать обратные вызовы успеха:

function DeleteBatchJS() {
    var shouldDelete = confirm('Delete the ENTIRE batch and all of its contents? ALL work will be lost.');
    if (!shouldDelete) {
        return;
    }

    var password = prompt('Please enter your password');
    var userInfo = get_cookie('UserInfo');
    PageMethods.AuthenticateUser(
        userInfo, 
        password,
        function(result) {
            // It's inside this callback that you have the result
            if (result) {
                PageMethods.DeleteBatchJSWM(
                    userInfo,
                    function(data) {
                        // It's inside this callback that you know if
                        // the batch was deleted or not
                        alert('Batch Deleted.');
                        window.location.href = 'BatchOperations.aspx';
                    }
                );
            }
        }    
    );
}
...