PageMethods未在ASPX页面中定义

时间:2013-08-14 21:07:23

标签: javascript asp.net ajax pagemethods

我正在查看一些我只能假设一次工作的旧代码。

MyPage.aspx:

function GetCompanyList(officeId) {
    var companyList = document.getElementById('<%= CompanyDropDown.ClientID %>');
    if (companyList.length == 0)
        PageMethods.GetCompanyList(officeId, OnGetCompanyList);
    else
        EditCompany();
}

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

代码背后:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
    return (
        from c in Repository.Query<Company>()
        where !c.IsDeleted && c.TypeEnumIndex == (short)CompanyRelationshipType.Hotel
        select new CompanyMinimum() {
            id = c.Id,
            desc = c.Description
        }
    ).ToList();
}

但是,在第一个代码段中调用PageMethods.GetCompanyList()时,Chrome会报告:

  

未定义PageMethods

任何人都可以看到有什么变化可以防止这种情况发生吗?

注意:我发现了类似的问题,但它们似乎都与此代码无关,不适用于母版页或用户控件,但这并非如此。

4 个答案:

答案 0 :(得分:25)

EnablePageMethods实际上只与Pagepublic的{​​{1}}子类的方法进行交互,并归为static

WebMethod有2个,而且还需要GetCompanyList

static

并且,我怀疑正在发生的事情是,如果它找不到任何具有全部3的方法,它将离开[System.Web.Services.WebMethod()] [System.Web.Script.Services.ScriptMethod()] public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) { // ... } 未定义的客户端。

答案 1 :(得分:3)

您可以通过jQuery调用ASP.NET AJAX页面方法,如下所示:

$.ajax({
    type: "POST",
    url: "PageName.aspx/MethodName",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        // Do something interesting here.
    }
});

答案 2 :(得分:2)

也许您正在使用网页中的路由。然后必须在调用PageMethods后设置真实路径:

PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);

答案 3 :(得分:0)

我认为应该表示的另一个解决方案的一个答案是,如果您的服务器上发生此错误,但本地不是放置空的MyPage.aspx占位符文件,现在它也可以在生产服务器上运行。