小编典典

在ASPX页面中未定义PageMethods

ajax

我正在查看一些旧代码,这些代码只能一次使用。

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

谁能看到为防止这种情况发生了什么变化?

注意:我发现了类似的问题,但它们似乎都与此代码有关,无法在母版页或用户控件中使用,在这里不是这种情况。


阅读 361

收藏
2020-07-26

共1个答案

小编典典

EnablePageMethods实际上只有一个方法相互作用Page被子类publicstatic及归属作为WebMethod

GetCompanyList有2个,也需要是static

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
    // ...
}

而且,我怀疑正在发生的事情是,PageMethods如果找不到任何具有全部3种方法的方法,它将留下未定义的客户端。

2020-07-26