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 并且我周五下午编码失明 :-)。
我的 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 并且我周五下午编码失明 :-)。