2013-08-14 13 views
14

Ich schaue auf einige alte Code, den ich nur auf einmal angenommen annehmen kann.PageMethods ist nicht in ASPX definiert Seite

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

Aber bei der cal l bis PageMethods.GetCompanyList() im ersten Schnipsel, Chrome berichtet:

Pagemethods nicht

definiert ist

Kann jemand sehen, was das hat sich geändert, um zu verhindern arbeiten?

Hinweis: Ich habe ähnliche Fragen gefunden, aber sie scheinen alle mit diesem Code verwandt zu sein, der nicht in Masterseiten oder Benutzersteuerelementen funktioniert, was hier nicht der Fall ist.

Antwort

18

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

GetCompanyList hat 2 davon und muss auch 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 clientseitige verlässt, wenn es keine Methoden findet, die alle 3.

+0

Sie haben definitiv Recht, dass die Methode "statisch" sein muss, aber ich bin mir nicht sicher, dass es sich darüber beschweren würde, dass der JavaScript-Proxy nicht definiert ist, wenn keine gültigen Seitenmethoden vorhanden sind. –

+0

@KarlAnderson: Versuchen, das jetzt zu bestätigen. –

+0

Ja, das scheint das Problem zu sein. Ich habe vor einiger Zeit herausgefunden, wo es von statisch zu nicht-statisch geändert wurde, als wir einen Teil des Codes umstrukturierten. Während ich noch keine statische Version habe, bekomme ich jetzt einen anderen Fehler als den, den ich hatte. Vielen Dank! –

3

Sie können ASP.NET AJAX Seite Methoden ü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. 
    } 
}); 
+0

Entschuldigung, ich habe den falschen Code in mein zweites Snippet eingefügt. Ja, 'EnablePageMethods' ist auf" true "gesetzt. Ich bin vertraut mit '$ .ajax()' von der Arbeit mit MVC, aber dennoch wäre es nett, diesen Code ohne eine Neuschreibung zu arbeiten. –

+1

Möglicherweise gibt es ein Problem mit der von Ihnen getesteten Chrome-Version und dem von ASP.NET AJAX generierten JavaScript. JQuery bietet Ihnen eine wesentlich bessere Browser-Erfahrung, aber ich verstehe Ihren Wunsch, es zum Laufen zu bringen. Funktioniert es in IE und/oder Firefox? –

+0

Gleiches Ergebnis auf IE. Sieht so aus, als könnte es an einer älteren Firefox-Version funktionieren. –

1

Vielleicht haben Sie Routing verwenden in Ihren Seiten. dann wirklicher Weg nach Aufruf Pagemethods eingestellt werden muss:

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

Eine Antwort von einer anderen Lösung, die ich denken soll, ist, dargestellt werden, wenn dieser Fehler auf dem Server auftritt, aber nicht lokal ist die leere MyPage.aspx Platzhalter-Datei zu platzieren und Jetzt funktioniert es auch auf dem Produktionsserver.