Разница между клиентскими обратными вызовами и методами страницы Ajax - ASP.NET

Основываясь на моем понимании, оба они по существу делают одно и то же (позволяет нам использовать метод на стороне сервера из JS). Есть ли различия?

Кроме того, методы Ajax Page могут быть реализованы либо с помощью JQuery, либо с помощью ScriptManager. Какой из них предпочтительнее и почему?

** BOUNTY: добавьте щедрость, чтобы получить ясное объяснение вопроса. Спасибо **

Ответы

Ответ 1

В принципе, Клиентские обратные вызовы и Ajax Page Методы делают то же самое. Они используют объект XMLHttpRequest для отправки запроса (обычно асинхронного) на некоторый URL-адрес, получения результатов этого запроса, затем выполнения метода обратного вызова, который вы предоставили (обратный вызов с нижним регистром c), передача результатов запроса ваш метод.

Сказав это, существует одно большое различие между двумя подходами:

  • Методы страниц реализованы как статические методы на вашей странице. Класс вашей страницы - это удобный контейнер для этих методов, который может быть размещен в любом месте (веб-сервис, пользовательский HttpHandler и т.д.). Поскольку никакой экземпляр никогда не будет создан, клиенту не нужно отправлять данные ViewState, и Asp.Net не должен запускаться через жизненный цикл Page. Оборотная сторона заключается в том, что у вас нет доступа к вашим методам и свойствам экземпляра класса Page. Однако во многих случаях вы можете обойти это путем рефакторинга методов экземпляра в статические методы. (Подробнее см. в этой статье.

  • Клиентские обратные вызовы реализованы как методы экземпляра на вашей странице. Они имеют доступ к другим методам экземпляра на вашей странице, включая материал, хранящийся в ViewState. Это удобно, но идет по цене: для создания экземпляра Page клиент должен отправить относительно большой объем данных на сервер и должен пройти через справедливый кусок жизненного цикла страницы. (В этой статье есть хорошая диаграмма, показывающая, какие части.)

Кроме того, стоимость их настройки варьируется довольно немного, а клиенты используют их по-разному:

  • Клиентские обратные вызовы требуют значительного количества идиосинкразических лесов код, который тесно связан с Asp.Net(как показано в ссылке выше). Данный гораздо более легкие альтернативы, которые у нас есть сейчас, я испытываю соблазн сказать, что эта технология устарела (для новой разработки).

  • Вызов методов страниц с использованием ScriptManager требует меньше настройки, чем клиентские обратные вызовы: у вас просто есть поместить a ScriptManager на ваш страница, установите EnablePageMethods = true, затем обращайтесь к своим методам страниц через прокси-сервер прокси-сервера PageMethods.

  • Вызов методов страницы с использованием jQuery требует только ссылки на библиотеку jQuery (и, конечно, знакомство с jQuery).

Я предпочитаю использовать jQuery для доступа к методам страниц, поскольку он не зависит от структуры сервера и предоставляет только правильное количество деталей реализации, но это действительно просто вопрос вкуса. Если вы идете с ScriptManager, его прокси-сервер делает метод страницы более легким для глаз, что некоторые считают более важным.

Ответ 2

Я бы сказал, что есть различия, но, как правило, делайте это так, как вам будет комфортно.

Я использовал оба подхода, а вызовы jQuery со страницы, как правило, быстрее. Я пишу обработчик ashx, который выполняет задание jquery call (запрашивает базу данных, обрабатывает что-то и т.д.) И вызывает ее со страницы. Я бы не использовал страницу aspx для вызова jQuery, потому что вы отправляете много информации, которая вам вообще не понадобится. Разница/преимущество использования вызова Ajax.Net состоит в том, что вам не нужно создавать другую страницу для обработки вещей, вы можете использовать те же события страницы, чтобы это сделать.

Например, если вам нужно заполнить второй выпадающий список, используя выбранное значение на первом, вы можете использовать Ajax.Net для вызова SelectedIndexChanged в коде страницы позади и при его запуске. Page_Load, SelectedIndexChanged, Page_PreRender и так далее. В методе событий вы запросите db и заполните второй ddl.

С jQuery, который может быть немного другим. Вы делаете свой вызов обработчику ashx, обработчик - это только серверный метод, который выполняет магию и возвращает данные в форме, которую вы хотите иметь (json, массив строк, xml и т.д.), И заполнять второй ddl с помощью javascript. Как я уже говорил вам, некоторые люди не чувствуют себя слишком комфортно с клиентским кодом и, как правило, делают это на сервере, но я всегда говорю, что вам нужно использовать правильный инструмент для правильной работы, поэтому знайте свои инструменты и применяйте их разумно.

Если вы хотите узнать больше об ASP.Net, обработчиках ASHX и jQuery, вы можете прочитать post, которые я написал об этом.

Надеюсь, что это поможет.

Ответ 3

Они, по сути, одинаковы. И

  • Установите веб-сервис для вас, который может вызвать javascript для элемента управления.
  • Предоставить асинхронный ответ e без использования жизненного цикла страницы.

Они разные:

  • Методы страницы просто требуют, чтобы вы украсили статический метод с атрибутом, и все готово. Остальная часть магии обрабатывается обработчиками и модулями HTTP. Обратные вызовы требуют, чтобы вы реализовали несколько интерфейсов и обработали обработчики событий async самостоятельно. Я нахожу их немного больнее.
  • Обратные вызовы работают только с определенными элементами управления. Вызов методов страницы позволяет вам влиять на любой элемент управления через пользовательский javascript. Обратные вызовы имеют небольшое преимущество здесь, когда поведение на стороне клиента уже написано и исправлено. Однако при использовании методов страницы у вас больше гибкости (поведение на стороне клиента определяется вами).

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

Что касается вопроса ScriptManager vs. JQuery, то я чувствую здесь больше о вкусе больше всего. Мне нравится синтаксис JQuery, и я чувствую, что он работает лучше, но в великой схеме вещей самая дорогая вещь - XmlHttpRequest... после этого выполнение javascript, вероятно, будет незначительным по сравнению с этим.