2013-08-14 5 views
14

Я смотрю на какой-то старый код, который я могу только считать выполненным за один раз.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 не определен

Может кто-нибудь увидеть, что изменилось, чтобы предотвратить это работает?

Примечание: Я нашел похожие вопросы, но все они были связаны с тем, что этот код не работает на главных страницах или пользовательских элементах управления, что здесь не так.

ответ

18

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 неопределенную на стороне клиента, если он не находит каких-либо методов, которые имеют все 3.

+0

Вы определенно правы в том, что метод должен быть 'static', но я не уверен, что он будет жаловаться на прокси-сервер JavaScript, который является' undefined', если не было допустимых методов страницы. –

+0

@ KarlAnderson: Попытка подтвердить это сейчас. –

+0

Да, это, похоже, проблема. Я нашел, где он был изменен с статического на нестатический некоторое время назад, когда мы реорганизовали часть кода. Пока у меня нет статической версии, теперь у меня другая ошибка, чем у меня. Благодаря! –

3

Вы можете вызвать ASP.NET AJAX страницу Методы через JQuery, как это:

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

Извините, я вложил неправильный код в свой второй фрагмент. Да, для параметра EnablePageMethods установлено значение true. Я знаком с '$ .ajax()' от работы с MVC, но все же было бы неплохо заставить этот код работать без перезаписи. –

+1

Возможно, возникла проблема с любой версией Chrome, которую вы пытаетесь использовать, и JavaScript, созданный ASP.NET AJAX, jQuery предоставит вам гораздо лучший опыт работы в разных браузерах, но я понимаю ваше желание заставить его работать. Работает ли он в IE и/или Firefox? –

+0

Тот же результат по IE. Похоже, он может работать над более старой версией Firefox. –

1

может быть, вы с помощью маршрутизации на ваших страницах. то должен быть установлен реальный путь после PageMethods вызова:

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

Один ответ от другого решения, я думаю, должна быть представлена, если эта ошибка происходит на сервере, но не локально, чтобы поместить пустой файл MyPage.aspx заполнитель и теперь он работает и на производственном сервере.

Смежные вопросы