2013-08-14 19 views
14

Patrzę na stary kod, który mogę tylko zakładać, że pracował w tym samym czasie.PageMethods nie jest zdefiniowany w ASPX Strona

MyPage.aspx:

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

I:

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

Kod za:

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

Ale w obi l do PageMethods.GetCompanyList() w pierwszym fragmencie, Chrome donosi:

PageMethods nie jest zdefiniowana

Czy ktoś może zobaczyć, co się zmieniło, aby temu zapobiec działa?

Uwaga: Znalazłem podobne pytania, ale wszystkie wydawały się powiązane z tym kodem, który nie działa na stronach wzorcowych lub kontrolkach użytkownika, co nie ma miejsca w tym przypadku.

Odpowiedz

18

EnablePageMethods faktycznie współdziała tylko z metod jest Page podklasy, które public, static i przypisać jako WebMethod.

GetCompanyList ma 2 z nich i po prostu musi być static.

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

I podejrzewam, że to, co się dzieje jest to, że wyjeżdża PageMethods niezdefiniowany po stronie klienta, jeśli nie znaleźliśmy żadnych metod, które posiadają wszystkie 3.

+0

Masz absolutnie rację co do potrzeby, aby ta metoda była "statyczna", ale nie jestem pewien, czy narzekałby on na serwer proxy JavaScript będący "niezdefiniowany", gdyby nie było prawidłowych metod strony. –

+0

@KarlAnderson: Próbuję to teraz potwierdzić. –

+0

Tak, wydaje się, że to jest problem. Zauważyłem, że jakiś czas temu zmieniono ją ze statycznej na niestatyczną, kiedy refaktoryzowaliśmy część kodu. Chociaż nie mam jeszcze działającej wersji statycznej, teraz dostaję inny błąd niż ten, który miałem. Dzięki! –

3

Można powołać ASP.NET AJAX stronę Metody pośrednictwem jQuery, podobnie jak to:

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

Przykro mi, wkleiłem nieprawidłowy kod w moim drugim fragmencie. Tak, 'EnablePageMethods' ma wartość true. Jestem zaznajomiony z '$ .ajax()' z pracy z MVC, ale byłoby miło, aby ten kod działał bez przepisywania. –

+1

Może występować problem z wersją którejkolwiek wersji przeglądarki Chrome i JavaScript wygenerowany przez ASP.NET AJAX, jQuery zapewni Ci znacznie lepszą obsługę w różnych przeglądarkach, ale rozumiem, że chcesz ją uruchomić. Czy to działa w IE i/lub Firefox? –

+0

Ten sam wynik na IE. Wygląda na to, że może działać na starszej wersji Firefoksa. –

1

może używasz Routing w swoich stronach. Następnie należy ustawić prawdziwy tor po PageMethods połączeń:

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

Jedna odpowiedź z innego rozwiązania, które moim zdaniem powinny być reprezentowane jest, jeśli ten błąd występuje na serwerze, ale nie lokalnie jest umieszczenie pustego pliku MyPage.aspx zastępczy i teraz działa również na serwerze produkcyjnym.

Powiązane problemy