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