ASP.NET AJAX странность - PullRequest
2 голосов
/ 02 июня 2010

Хорошо, я думал, что хорошо понял эти темы, но, думаю, нет, так что, надеюсь, кто-то здесь сможет это прояснить.

Page.IsAsync, кажется, сломан. Всегда возвращает false.

Но ScriptManager.IsInAsyncPostBack вроде бы работает, вроде.

Возвращает значение true во время приема-передачи для элементов управления внутри UpdatePanels. Это хорошо; Я могу сказать, если это частичный постбэк или обычный.

ScriptManager.IsInAsyncPostBack возвращает false, однако для асинхронных методов страницы. Почему это? Это не обычный постбэк, я просто вызываю публичный статический метод на странице.

Это вызывает проблему, потому что я также понял, что если у вас есть элемент управления с AutoPostBack = false, он не будет инициировать обратную передачу самостоятельно, но если у него есть обработчик событий на странице, этот код обработчика событий будет выполняться при следующей обратной передаче, независимо от того, как произошла обратная передача, ЕСЛИ значение изменилось. то есть, если я настрою выпадающий список, а затем нажму на кнопку, код обработчика этого выпадающего списка сработает. Это нормально, за исключением того, что это также будет происходить во время вызовов метода страницы, и у меня нет возможности узнать разницу.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

Как указывает Тьяарт, Page.IsAsync не имеет ничего общего с AJAX! См. MSDN для получения дополнительной информации об IsAsync и см. http://msdn.microsoft.com/en-us/magazine/cc163725.aspx для более полного описания асинхронных страниц].

Методы страницы - это веб-сервисы с другим именем. ScriptManager испустит необходимую JS-плиту, чтобы сделать создание XHR, который очень просто вызывает веб-сервис, но это все, что ScriptManager действительно имеет к ним отношение.

Как говорится на странице MSDN, ScriptManager.IsInAsyncPostBack будет иметь значение true, только если запрос находится в «режиме частичного рендеринга», поэтому ScriptManager.IsInAsyncPostBack будет иметь значение false, когда вы выполняете метод страницы, так как этот запрос не был создан в результате частичной обратной передачи (т. е. UpdatePanel обновляет свое содержимое).

Теперь похоже, что вы получаете обработчики событий на стороне сервера, выполняемые как очевидный результат вызова метода страницы из JS. AFAIAA, вызов метода страницы с использованием javascript не должен заставлять страницу проходить нормальный жизненный цикл страницы - поэтому загрузка страницы, инициализация и т. Д., И эти события не должны выполняться. Так что это странно.

Предложение: -

См. Комментарии Анза и ответы Дэйва здесь encosia .

Может быть, у вас проблемы схожие с Anz? то есть метод page вызывается, но затем ваша страница отправляется обратно сразу после?

0 голосов
/ 03 июня 2010

Page.IsASync, вероятно, возвращает, была ли страница задана как Async в директиве page

<%@ Page Language="vb" Async="true" ...

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

Это не совсем странно, они разработали его таким образом, чтобы код на стороне сервера всегда был синхронизирован со стороной клиента. Таким образом, если вы делаете выбор из выпадающего списка на странице и происходит обратная передача, то это изменение выпадающего списка выполняет свой собственный код вместе с элементом управления, который инициировал обратную передачу. Вы можете прочитать больше о жизненном цикле страницы ASP .Net. мне стало намного понятнее.

0 голосов
/ 03 июня 2010

Это так, потому что ASP.NET Ajax и ASP.NET Callbacks это две разные вещи и реализованы по-разному.К сожалению, вы должны использовать оба Page.IsAsync и ScriptManager.IsInAsyncPostBack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...