c# серверный из - как вызвать метод ASP.NET c # с использованием javascript




3 Answers

PageMethod - простой и быстрый подход для Asp.Net AJAX. Мы можем легко улучшить пользовательский интерфейс и производительность веб-приложений, развязав мощь AJAX. Одна из лучших вещей, которые мне нравятся в AJAX, - это PageMethod.

PageMethod - это способ, с помощью которого мы можем выставить метод боковой страницы сервера в java-скрипте. Это приносит так много возможностей, что мы можем выполнять множество операций, не используя медленные и раздражающие сообщения.

В этом сообщении я показываю основное использование ScriptManager и PageMethod. В этом примере я создаю форму регистрации пользователя, в которой пользователь может зарегистрировать свой адрес электронной почты и пароль. Вот разметка страницы, которую я собираюсь разработать:

<body>
    <form id="form1" runat="server">
    <div>
        <fieldset style="width: 200px;">
            <asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
            <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            <asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
            <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
        </fieldset>
        <div>
        </div>
        <asp:Button ID="btnCreateAccount" runat="server" Text="Signup"  />
    </div>
    </form>
</body>
</html>

Чтобы настроить метод страницы, сначала нужно перетащить диспетчер сценариев на свою страницу.

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

Также обратите внимание, что я изменил EnablePageMethods="true" .
Это скажет ScriptManager, что я буду называть PageMethods с клиентской стороны.

Теперь следующий шаг - создать функцию Server Side.
Вот функция, которую я создал, эта функция проверяет вход пользователя:

[WebMethod]
public static string RegisterUser(string email, string password)
{
    string result = "Congratulations!!! your account has been created.";
    if (email.Length == 0)//Zero length check
    {
        result = "Email Address cannot be blank";
    }
    else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
    {
        result = "Not a valid email address";
    }
    else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
    {
        result = "Not a valid email address";
    }

    else if (password.Length == 0)
    {
        result = "Password cannot be blank";
    }
    else if (password.Length < 5)
    {
        result = "Password cannot be less than 5 chars";
    }

    return result;
}

Чтобы сообщить менеджеру сценария, что этот метод доступен через javascript, нам нужно обеспечить две вещи:
Первый: этот метод должен быть «public static».
Второй: должен существовать тег [WebMethod] выше, как указано в приведенном выше коде.

Теперь я создал функцию на стороне сервера, которая создает учетную запись. Теперь мы должны называть его с клиентской стороны. Вот как мы можем вызвать эту функцию с клиентской стороны:

<script type="text/javascript">
    function Signup() {
        var email = document.getElementById('<%=txtEmail.ClientID %>').value;
        var password = document.getElementById('<%=txtPassword.ClientID %>').value;

        PageMethods.RegisterUser(email, password, onSucess, onError);

        function onSucess(result) {
            alert(result);
        }

        function onError(result) {
            alert('Cannot process your request at the moment, please try later.');
        }
    }
</script>

Чтобы вызвать мой метод на стороне сервера Зарегистрировать пользователя, ScriptManager генерирует прокси-функцию, доступную в PageMethods.
У моей функции на стороне сервера есть два параметра, т. Е. Адрес электронной почты и пароль. После этих параметров мы должны дать еще два имени функции, которые будут выполняться, если метод успешно выполнен (первый параметр, т.е. onSucess) или метод не работает (второй параметр, т.е. результат).

Теперь все кажется готовым, и теперь я добавил OnClientClick="Signup();return false;" на моей кнопке «Регистрация». Итак, вот полный код моей страницы aspx:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
        </asp:ScriptManager>
        <fieldset style="width: 200px;">
            <asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
            <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            <asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
            <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
        </fieldset>
        <div>
        </div>
        <asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="Signup();return false;" />
    </div>
    </form>
</body>
</html>

<script type="text/javascript">
    function Signup() {
        var email = document.getElementById('<%=txtEmail.ClientID %>').value;
        var password = document.getElementById('<%=txtPassword.ClientID %>').value;

        PageMethods.RegisterUser(email, password, onSucess, onError);

        function onSucess(result) {
            alert(result);
        }

        function onError(result) {
            alert('Cannot process your request at the moment, please try later.');
        }
    }
</script>
mvc

Кто-нибудь знает, как вызвать серверный метод c # с помощью javascript? Что мне нужно сделать, так это остановить импорт, если выбрано «Отмена» или продолжить импорт, если выбрано «ОК». Я использую visual studio 2010 и c # в качестве своего lanaguage программирования

Это мой код:

private void AlertWithConfirmation()            
{                 
    Response.Write(
        "<script type=\"text/javascript\">" +     
            "if (window.confirm('Import is currently in progress. Do you want to continue with importation? If yes choose OK, If no choose CANCEL')) {" +     
                "window.alert('Imports have been cancelled!');" +     
            "} else {" +   
                "window.alert('Imports are still in progress');" +     
            "}" +      
        "</script>");   
}



Я собираюсь пойти прямо вперед и предложить решение с помощью jQuery, а это значит, что вам нужно будет импортировать библиотеку, если вы еще этого не сделали ...

Импортируйте библиотеку jQuery в свою страницу:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>

Затем создайте еще один файл сценария * .js (я вызываю свой ExecutePageMethod , поскольку это единственный метод, который он будет раскрывать) и импортирует его:

<script type="text/javascript" src="/ExecutePageMethod.js" ></script>

Вновь добавленный файл добавьте следующий код (я помню, что вытащил его из другого места, так что кому-то это заслуживает похвалы):

function ExecutePageMethod(page, fn, paramArray, successFn, errorFn) {
    var paramList = '';
    if (paramArray.length > 0) {
        for (var i = 0; i < paramArray.length; i += 2) {
            if (paramList.length > 0) paramList += ',';
            paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
        }
    }
    paramList = '{' + paramList + '}';
    $.ajax({
        type: "POST",
        url: page + "/" + fn,
        contentType: "application/json; charset=utf-8",
        data: paramList,
        dataType: "json",
        success: successFn,
        error: errorFn
    });
}

Затем вам нужно будет увеличить свой метод .NET-страницы с помощью соответствующих атрибутов:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string MyMethod()
{
    return "Yay!";
}

Теперь, в пределах вашей разметки страницы, внутри блока script или из другого файла сценария, вы можете вызвать метод, например:

ExecutePageMethod("PageName.aspx", "MyMethod", [], OnSuccess, OnFailure);

Очевидно, вам нужно будет OnFailure методы OnSuccess и OnFailure .

Чтобы использовать результаты, скажем, в методе OnSuccess , вы можете использовать метод parseJSON, который, если результаты становятся более сложными (например, или возвращать массив типов, например), этот метод будет анализировать его на объекты:

function OnSuccess(result) {
    var parsedResult = jQuery.parseJSON(result.d);
}

Этот код ExecutePageMethod особенно полезен, поскольку он повторно используется, поэтому вместо того, чтобы управлять $.ajax для каждого метода страницы, который вы, возможно, захотите выполнить, вам просто нужно передать эту страницу, имя метода и аргументы этому методу.




Существует несколько вариантов. Вы можете использовать атрибут WebMethod для своей цели.




Related