it-swarm.com.de

PageMethods ist in ASPX-Seite nicht definiert

Ich betrachte einen alten Code, von dem ich nur annehmen kann, dass er auf einmal funktioniert hat.

MyPage.aspx:

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

Und:

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

Code hinter:

[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();
}

Beim Aufruf von PageMethods.GetCompanyList() im ersten Snippet berichtet Chrome:

PageMethods ist nicht definiert

Kann jemand sehen, was sich geändert hat, um zu verhindern, dass dies funktioniert?

Hinweis: Ich habe ähnliche Fragen gefunden, die sich aber alle auf diesen Code bezogen haben, der in Masterseiten oder Benutzersteuerelementen nicht funktioniert, was hier nicht der Fall ist.

16
Jonathan Wood

EnablePageMethods interagiert tatsächlich nur mit Methoden einer Page-Unterklasse, die public, static sind und als WebMethod zugeordnet werden.

GetCompanyList hat 2 davon und muss nur static sein.

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

Und ich vermute, was passiert ist, dass es PageMethods undefined clientseitig hinterlässt, wenn es keine Methoden findet, die alle 3 haben.

22

Sie können ASP.NET AJAX Page Methods über jQuery wie folgt aufrufen:

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

möglicherweise verwenden Sie Routing in Ihren Seiten. Dann muss der reale Pfad nach dem Aufruf von PageMethods festgelegt werden:

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

Eine Antwort aus einer anderen Lösung, die meiner Meinung nach dargestellt werden sollte, ist, wenn dieser Fehler auf Ihrem Server auftritt, jedoch nicht lokal, die leere Platzhalterdatei MyPage.aspx zu platzieren und jetzt auf dem Produktionsserver funktioniert.

0
Enkode