PageMethods未定义

时间:2011-04-28 12:02:03

标签: .net asp.net ajax master-pages pagemethods

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

我已将脚本管理器“EnablePageMethods”设置为true。我的方法是公开的& 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>

3 个答案:

答案 0 :(得分:16)

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

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

从来没有真正得到这个问题的明确答案。

我怀疑它是否与aspx页继承自Page类并且ascx控件继承自UserControl类的事实有关。至于为什么我不太确定。

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

答案 1 :(得分:11)

设置EnablePageMethods =“true”

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

我希望这对你有用

答案 2 :(得分:4)

据我了解,不支持使用usercontrol的PageMethods,以下线程似乎确认

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

ASP.NET AJAX Page Methods from UserControl

但我认为可能有一种解决方法(不确定这在您的方案中是否有效)。您可以在页面的代码中编写OneLine PageMethod,后面会调用Controls Page方法。现在,您可以从aspx调用页面的方法,并将其设置为go。

或者你可以使用替代方案 Alternate way to use page method inside user control asp.net