PageMethods 未定义异常:未在 ASP.NET 中调用 WebMethod

PageMethods is not defined Exception: Does not call the WebMethod in ASP.NET

我的 Javascript 函数中的 PageMethod 调用没有调用我的 WebMethod。这是代码:

编辑 控制台显示:

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. 
}

是的,我在 ScriptManager 标签中添加了 EnablePageMethods="true" 标签。

但是,我出于两个不同的目的(两个不同的名称)在同一页面中使用了两个 WebMethod。这可能是问题所在吗?我几乎不这么认为,但是你们怎么看?

您的页面上是否配置了 ScriptManager?

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

看起来问题出在脚本的执行顺序和 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() 包装您的脚本代码,然后尝试一下。

希望对您有所帮助。

如果出现持久性问题,请仔细检查来自 javascript 的调用 我使用的是 PageMehods 而不是 PageMethods 并且我周五下午编码失明 :-)。