Параметр от кода до jquery [Мастер-страница] - PullRequest
0 голосов
/ 16 февраля 2010

Я создаю Меню на главной странице, используя JQuery. я передаю идентификатор ссылки на jquery, используя $ .ajax ({});

Проблема:

Getting failed: Showing error message in AjaxFailed(result) function.

Код: HTML [JQuery]

$.ajax({
             type: "POST",
            url: "Master.Master.cs/UserStatus",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataType: "json",
            success: AjaxSucceeded,
            error: AjaxFailed
        });

function AjaxSucceeded(result) {

        if (result.d.length != 0) {
            for (var i = 0; i < result.d.length; i++) {
                $(result.d[i]).hide();
            }
        }
    }

    function AjaxFailed(result) {
        alert("Error");
    }  

c # Код: Codebehind

private static List<string> xx;
[WebMethod]
    public static List<string> UserStatus()
    {
        return xx;
    }
protected void Page_Load(object sender, EventArgs e)
    {
        xx = new List<string> {"#ll1", "#ll2" };

    }

Ответы [ 4 ]

1 голос
/ 16 февраля 2010

Как упоминали Андре и Маттиас, расширение .cs не обслуживается, поэтому вам нужно будет использовать расширение .aspx для доступа к WebMethod.

Проблема, которую я вижу в вашем примере, заключается в том, что вы помещаете метод в MasterPage (который имеет расширение .master), который также не обслуживается, поэтому вы не можете вызывать веб-метод из него.

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

Второй обходной путь, который вы можете использовать, - определить WebMethod в веб-службе .asmx, размещенной в проекте. Это будет работать так же, как вызов WebMthod на странице, только вы должны будете использовать адрес веб-службы .asmx вместо адреса страницы для совершения вызова.

1 голос
/ 16 февраля 2010

Атрибут webmethod говорит, что этот метод должен отвечать на определенный URL-адрес (немного похоже на маршрутизацию в asp.net mvc). Поскольку я не использую веб-формы, я не знаю, какую логику он использует, когда решает, на какой URL должен реагировать метод. Но я предполагаю, что URL должен быть чем-то вроде «Master.cs / UserStatus» (не уверен насчет расширения .cs). И это, конечно, относительный URL, поэтому вы можете попробовать что-то вроде этого: <%=ResolveUrl("~/Master.cs/UserStatus")%> (если главная страница находится в вашей корневой папке). Тогда ваш пример должен выглядеть примерно так:

$.ajax({
        type: "POST",
        url: '<%=ResolveUrl("~/Master.cs/UserStatus")%>',
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: AjaxSucceeded,
        error: AjaxFailed
    });

Обновление

Возможно, расширение .cs неверно. Но я не думаю, что вы должны иметь это на главной странице в любом случае. Вероятно, вы должны иметь это в веб-сервисе или в обработчике .ashx или что-то еще, если вы хотите использовать ajax. Но с последним комментарием кажется, что вам не нужно использовать ajax (а если вам это не нужно, вам не нужно). Проблема в коде, который вы написали в комментарии, возможно, заключается в том, что идентификатор неверен (помните, что вам нужен идентификатор клиента в javascript).

Но я бы, наверное, сделал это примерно так:

<script type="text/javascript">
    var statuses = [];
    <%foreach(var status in UserStatus()) {%>
        statuses.push(<%=status%>);
    <%}%>
</script>

Это сделает этот javascript в браузере:

<script type="text/javascript">
    var statuses = [];

        statuses.push("#ll1");
        statuses.push("#ll2");

</script>

Тогда ваши статусы будут в массиве statuses.

0 голосов
/ 16 февраля 2010

Я думаю, что проблема в том, что вы пытаетесь отправить в файл .cs. Расширение .cs не обслуживается ISS по соображениям безопасности. Таким образом, даже если ваш метод находится в коде файла, вы должны отправить в файл .aspx. ASP.NET сделает все остальное за вас. Так что попробуйте:

$.ajax({
         type: "POST",
        url: "/Master.Master.aspx/UserStatus",
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: AjaxSucceeded,
        error: AjaxFailed
    });

function AjaxSucceeded(result) {

    if (result.d.length != 0) {
        for (var i = 0; i < result.d.length; i++) {
            $(result.d[i]).hide();
        }
    }
}

function AjaxFailed(result) {
    alert("Error");
}
0 голосов
/ 16 февраля 2010

Если вы еще этого не сделали, вам нужно добавить атрибут [ScriptService] в ваш веб-метод, как этот

Указывает, что веб-служба может быть вызывается из скрипта

См. ScriptServiceAttribute

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