web-dev-qa-db-fra.com

PageMethods n'est pas défini dans la page ASPX

Je regarde un vieux code que je ne peux que supposer travaillé en même temps.

MyPage.aspx:

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

Et:

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

Code derrière:

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

Mais à l'appel de PageMethods.GetCompanyList() dans le premier extrait, Chrome indique:

PageMethods n'est pas défini

Quelqu'un peut-il voir ce qui a changé pour empêcher cela de fonctionner?

Remarque: j'ai trouvé des questions similaires mais elles semblaient toutes liées au fait que ce code ne fonctionnait pas dans les pages maîtres ni dans les contrôles utilisateur, ce qui n'est pas le cas ici.

16
Jonathan Wood

EnablePageMethods n'interagit qu'en fait avec les méthodes d'une sous-classe Page qui sont public, static et attribuées sous la forme WebMethod.

GetCompanyList en a 2 et doit également être static.

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

Et, je soupçonne que ce qui se passe, c’est que PageMethods est laissé côté client indéfini s'il ne trouve pas de méthodes qui ont toutes les 3.

22
Jonathan Lonowski

Vous pouvez appeler des méthodes de page ASP.NET AJAX via jQuery, comme suit:

$.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

peut-être utilisez-vous le routage dans vos pages. alors il faut définir le chemin réel après l'appel de PageMethods:

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

Une solution à une autre solution qui, à mon avis, devrait être représentée est que si cette erreur se produit sur votre serveur mais pas localement, vous devez placer le fichier fictif vide MyPage.aspx et que cela fonctionne également sur le serveur de production.

0
Enkode