PageMethods не определено Исключение: не вызывает WebMethod в ASP.NET

Мой WebMethod не вызывается вызовом PageMethod в моей функции Javascript. Вот код:

РЕДАКТИРОВАТЬ Консоль говорит:

Uncaught ReferenceError: PageMethods is not defined

JS:

    function profilefollowbuttonchange(cn) {
        if (cn.className == "profile-page-owner-follow-button") {
                cn.className = "profile-page-owner-follow-button-active";
                alert("camefollow");
                PageMethods.ToggleFollow("follow", onSuccess, onFailure); //Does not trigger
                alert("camefollow"); //Doesn't get printed
            }

            else {
                cn.className = "profile-page-owner-follow-button";
                alert("cameunfollow");
                PageMethods.ToggleFollow("unfollow", onSuccess, onFailure); //Does not trigger
                alert("cameunfollow"); //Doesn't get printed
            }   
    }

function onSuccess() {
}

function onFailure() {
}

C#:

[WebMethod]
public static void ToggleFollow(string command)
{
       //Does not reach this point. 
}

И да, я добавил тег EnablePageMethods="true" в тег ScriptManager.

Тем не менее, я использовал два метода WebMethods на одной странице для двух разных целей (два разных имени). Может ли это быть проблемой? Я так не думаю, но что вы думаете?

3 ответа

Решение

Похоже, проблема в вашей последовательности выполнения скрипта и ScriptManager, Это означает, что для PageMethods распознается кодом Javascript, вам нужно загрузить ScriptManager сначала, а затем запустить эту функцию Javascript. Так что в моей логике, здесь требуется простое изменение. Вам нужно использовать $(document).ready() здесь, в вашем сценарии, чтобы убедиться, что ScriptManager сначала в DOM, а затем ваш скрипт запускается. Нечто подобное должно помочь здесь.

$(document).ready(function () {
function profilefollowbuttonchange(cn) {
        if (cn.className == "profile-page-owner-follow-button") {
                cn.className = "profile-page-owner-follow-button-active";
                alert("camefollow");
                PageMethods.ToggleFollow("follow", onSuccess, onFailure); //Does not trigger
                alert("camefollow"); //Doesn't get printed
            }

            else {
                cn.className = "profile-page-owner-follow-button";
                alert("cameunfollow");
                PageMethods.ToggleFollow("unfollow", onSuccess, onFailure); //Does not trigger
                alert("cameunfollow"); //Doesn't get printed
            }   
    }

function onSuccess() {
}

function onFailure() {
}
});

Просто оберните ваш код сценария $(document).ready() а потом попробуй.

Надеюсь это поможет.

У вас на странице настроен ScriptManager?

<asp:ScriptManager ID="scriptManager" runat="server" EnablePageMethods="true">
    <Scripts>
        <asp:ScriptReference Path="script1.js" />
    </Scripts>
</asp:ScriptManager>

В случае серьезных проблем, просто дважды проверьте вызов из javascript. У меня там были PageMehods вместо PageMethods, и у меня была слепота кодирования днем ​​в пятницу :-).

Другие вопросы по тегам