PageMethods未定义。

4
我正在设置 PageMethods 以使用 JavaScript 访问服务器端代码。在使用 Firebug 进行调试时,我收到错误提示“PageMethods 未定义”。同时,服务器端代码也没有被触发。

我已经将脚本管理器“EnablePageMethods”设置为 true。我的方法是 public & static 的,并且已经设置了 WebMethod 属性。但我仍然收到上述错误。可能是由于脚本管理器位于顶级主页面中,该主页面有两个子主页面,然后调用了我的页面:

即:

主主页面(带脚本管理器) -> 主要的主页面 -> 次要的主页面 -> 我的页面 -> 我的用户控件(具有 WebMethod)

这是 WebMethod:
 [System.Web.Services.WebMethod]
public static void AddNote(string t)
{
    int propid = 1; 
    if (propid > 0)
    {
     //Call my method
    }
}

这是我的JavaScript代码:

  function editNodes(t) {
    alert('test1');
    alert(t);
    PageMethods.AddNote(t,OnSuccess,OnFailure);
    alert('method called');
}
function OnSuccess() { 
    alert('Success'); 
    if (!navigator.appName == 'Microsoft Internet Explorer') {
        window.location.href = window.location.href;
    }

}
function OnFailure(error) {
    alert('Error:' + error);
}    

这是我调用它的位置:

   <a href="#" class="btngeneral" onclick="javascript:editNodes(2);">Save</a>

请问您能否在这里粘贴一下您用于在客户端访问页面方法的代码? - Genady Sergeev
1
请确保脚本管理器标签位于顶级页面中,即您的主页面。 - Shadow The Spring Wizard
3个回答

16

页面方法无法在母版页或用户控件中工作。

如果将该方法移动到您的页面的上一级,则应该可以正常工作。

我从未真正得到过一个明确的答案。

我怀疑这是因为aspx页面继承自Page类,而ascx控件继承自UserControl类。至于为什么是这样,我不太确定。

个人建议使用通用处理程序(.ashx)页面,并通过javascript调用它。


这是唯一一个真正有用的评论。谢谢。 - BigMan

11

设置 EnablePageMethods="true"

 <ajaxToolkit:ToolkitScriptManager ID="scriptManager" 
                               runat="server" 
                               AsyncPostBackTimeout="99999999"
                               EnablePageMethods="true" />

我希望这对您有用。


这对我来说是解决方案!在我的情况下,我必须设置EnablePageMethods="true"的Telerik RadScriptManager。 - DanM7
这篇文章有点旧了,但我还是想评论一下。我在我的母版页的<asp:ScriptManager...代码中启用了EnablePageMethods="true",结果完美运行。 - esausilva

4
据我所知,用户控件上的PageMethods不受支持,下面的线程似乎证实了这一点。

http://forums.asp.net/p/977525/1242935.aspx

来自UserControl的ASP.NET AJAX页面方法

但我认为可能有一个解决方法(不确定在您的情况下是否有效)。您可以在页面的代码后台中编写一个OneLine PageMethod,该方法将调用控件的Page方法。现在,您可以从aspx调用页面的方法并准备就绪。

或者您可以使用此替代方法{{link2:在asp.net中在用户控件内使用页面方法的替代方法}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接