PageMethods не определяется на странице ASPX
Я смотрю на какой-то старый код, который я могу только считать выполненным за один раз.
MyPage.aspx:
function GetCompanyList(officeId) {
var companyList = document.getElementById('<%= CompanyDropDown.ClientID %>');
if (companyList.length == 0)
PageMethods.GetCompanyList(officeId, OnGetCompanyList);
else
EditCompany();
}
И
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
Код позади:
[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();
}
Но при вызове PageMethods.GetCompanyList()
в первом фрагменте Chrome сообщает:
PageMethods не определен
Может ли кто-нибудь увидеть, что изменилось, чтобы это не сработало?
Примечание. Я нашел похожие вопросы, но все они были связаны с тем, что этот код не работает на главных страницах или пользовательских элементах управления, что здесь не так.
Ответы
Ответ 1
EnablePageMethods
фактически взаимодействует только с методами подкласса Page
, которые являются public
, static
и отнесены как WebMethod
.
GetCompanyList
имеет 2 из них и просто также должен быть static
.
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
// ...
}
И я подозреваю, что происходит, потому что он оставляет на стороне клиента PageMethods
undefined, если он не находит никаких методов, которые имеют все 3.
Ответ 2
Вы можете вызвать ASP.NET AJAX Page Method с помощью jQuery, например:
$.ajax({
type: "POST",
url: "PageName.aspx/MethodName",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Do something interesting here.
}
});
Ответ 3
Возможно, вы используете Маршрутизацию на своих страницах. то должен быть установлен реальный путь после вызова PageMethods:
PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
Ответ 4
Один ответ из другого решения, которое, как мне кажется, должно быть представлено, - это если эта ошибка возникает на вашем сервере, но не локально - это поместить пустой файл-заполнитель MyPage.aspx, и теперь он также работает на рабочем сервере.