20

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

我的页面.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

4 回答 4

27

EnablePageMethodsPage实际上只与子类的方法交互,这些方法是public,static和属性为WebMethod.

GetCompanyList有 2 个,也需要static

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

而且,我怀疑正在发生的事情是,PageMethods如果它没有找到任何具有全部 3 个的方法,它就会离开未定义的客户端。

于 2013-08-14T21:17:24.567 回答
5

您可以通过 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.
    }
});
于 2013-08-14T21:09:15.097 回答
2

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

PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
于 2013-10-04T19:58:43.370 回答
0

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

于 2015-07-23T08:49:08.633 回答