net from asp javascript asp.net ajax pagemethods

call c# from javascript asp net



PageMethods no está definido en la página ASPX (4)

Puede invocar los métodos de página ASP.NET AJAX a través de jQuery, de esta forma:

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

Estoy viendo un código antiguo que solo puedo asumir que funcionó al mismo tiempo.

MyPage.aspx:

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

Y:

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

Código detrás:

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

Pero en la llamada a PageMethods.GetCompanyList() en el primer fragmento, Chrome informa:

PageMethods no está definido

¿Alguien puede ver lo que ha cambiado para evitar que esto funcione?

Nota: he encontrado preguntas similares pero todas parecían estar relacionadas con este código que no funciona en las páginas maestras o en los controles de usuario, lo cual no es el caso aquí.


Una respuesta de otra solución que creo que debería estar representada es si este error se produce en su servidor, pero no localmente, para colocar el archivo de marcador de posición MyPage.aspx vacío y ahora también funciona en el servidor de producción.


tal vez usted está utilizando enrutamiento en sus páginas. luego se debe establecer la ruta real después de llamar a PageMethods:

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


EnablePageMethods realidad solo interactúa con los métodos de una subclase de Page que son public , static y atribuidos como un WebMethod .

GetCompanyList tiene 2 de esos y solo necesita ser static .

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

Y sospecho que lo que está sucediendo es que deja a PageMethods undefined del lado del cliente si no encuentra ningún método que tenga los 3.