2013-01-24 7 views
7

Можно создать дубликат:
Call non-static method in server side(aspx.cs) from client side use javascript (aspx)ASP.NET вызова нестатическая WebMethod из JS AJAX

Я это следующий код, который работает отлично

function getFooObj() { 
    $.ajax({ 
     type: "POST", 
     url: "Dummy.aspx/GetFooObj", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { 
      alert('good'); 
     } 
    }); 
} 

[WebMethod] 
public static FooObj GetFooObj() 
{ 
    // some code that returns FooObj 
} 

мой вопрос если я хочу, чтобы мой WebMethod НЕ был статичным, как я могу его назвать из JS?

[WebMethod] 
public FooObj GetFooObj() 
{ 
    // some code that returns FooObj 
} 

ответ

11

Невозможно - PageMethods должен быть статическим.

Причина довольно проста - метод экземпляра (нестатический) означает, что он может получить доступ к состоянию страницы, включая элементы управления. Однако для страницы ASP.NET/модели управления требуется информация состояния (состояние просмотра, проверка событий и т. Д.) Для обеспечения согласованного состояния элементов управления. Но в случае Методов страниц это невозможно, потому что полная форма не отправляется назад (что по сути является идеей, лежащей в основе PageMethods/ScriptServices), вы отправляете/получаете только минимальную информацию между клиентом/сервером).

Для использования методов экземпляра (при условии, что вам нужен доступ к управлению), вы должны использовать способ UpdatePanel для AJAX.

0

Почему бы не реализовать простой веб-сервис? вы можете найти действительно хороший пример от here

3

Причина, по которой он поддерживает только статические методы, заключается в том, что эта страница не создается, если вы хотите использовать нестатические веб-методы, то перейдите на веб-службу (.asmx).

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