Использование jQuery AJAX для вызова функции ASP.NET в управляющем коде позади кода страницы - PullRequest
4 голосов
/ 03 августа 2010

У меня есть пользовательский элемент управления, который использует AJAX в jQuery.

Мне нужно вызвать функцию из кода моего элемента управления, но каждый пример, который я нахожу в Интернете, выглядит так:

$("input").click(function() {
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetResult",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
            //do something
        }
    });
});

Это нормально работает, если у меня есть метод на странице Default.aspx. Но я не хочу иметь функцию там, мне нужна функция в коде моего управления. Как я могу изменить свойство url для вызова правильной функции?

Я пытался:

url: "GetResult"

но это не сработало.

Ответы [ 2 ]

7 голосов
/ 03 августа 2010

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

Другими словами, ВСЕ, что делает метод page, это вызывает метод usercontrol, поэтому он действительно маленький.Если у вас одна и та же подпись для нескольких дочерних элементов управления, вы можете передать параметр, чтобы сообщить методу страницы, какой из них вызывать / использовать.

РЕДАКТИРОВАТЬ: По запросу (очень простой пример).Вы можете найти другие примеры с более сложными типами, передаваемыми в метод на стороне сервера.например, см. мой ответ здесь: Асинхронная обратная передача Jquery .ajax на C # UserControl

Пример: Метод страницы: обратите внимание на «статическую» часть.

[WebMethod]
public static string GetServerTimeString()
{
    return MyNamespace.UserControls.Menu.ucHelloWorld();
}

Пользовательский элемент управленияМетод:

public static string ucHelloWorld()
{
    return "howdy from myUserControl.cs at: " + DateTime.Now.ToString();
}

Клиентский ajax через jquery:

$(document).ready(function()
{
    /***************************************/
    function testLoadTime(jdata)
    {
        $("#timeResult").text(jdata);

    };
    $("#testTimeServerButton").click(function()
    {
        //alert("beep");
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataFilter: function(data)
            {
                var msg;
                if (typeof (JSON) !== 'undefined' &&
                typeof (JSON.parse) === 'function')
                    msg = JSON.parse(data);
                else
                    msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },
            url: "MyPage.aspx/GetServerTimeString",
            success: function(msg)
            {
                testLoadTime(msg);
            }
        });
    });
});

Примечание: dataFilter: function (data) ... часть ajax такова, что он работает с 2.0 и 3.5asp.net ajax без изменения кода клиента.

5 голосов
/ 03 августа 2010

Вы не можете ... WebMethods должны быть в WebServices или Pages, они не могут быть внутри UserControls.

Подумайте об этом иначе, чтобы увидеть проблему немного яснее ... каков URL для UserControl? Поскольку нет способа получить к ним доступ, вы не можете получить доступ к методу напрямую. Вы могли бы попробовать другой способ, может быть, прокси-метод на вашей странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...