Полностью ли я неправильно понял ASP.Net AJAX (панель обновления)? - PullRequest
5 голосов
/ 26 ноября 2010

Возможно, я неправильно понял, как работает AJAX. Может кто-нибудь пролить свет на следующий упрощенный сценарий:

У меня есть веб-приложение asp.net. На странице есть пользовательский элемент управления внутри панели обновления (без изменения свойств) и менеджер сценариев.

В пользовательском элементе управления и в форме есть метка, оба получают текст DateTime.Now.ToString в событии загрузки. Также есть кнопка, которая вызывает пост обратно в пользовательский элемент управления.

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

Однако ... событие загрузки страницы на странице действительно обрабатывается с isPostBack = True (чего я не ожидал), и похоже, что все, что происходит в событии загрузки, не будет выдвинуто обратно к клиенту (поскольку ярлык не обновлялся).

Я не ожидал, что событие загрузки страницы (на странице, содержащей пользовательский элемент управления) будет вызываться и обрабатываться при обновлении панели AJAX, это правильно? или я что то не так делаю? Я помню, что читал что-то о Page.IsCallback, но это неверно, так что, возможно, это не имеет к этому никакого отношения.

Ответы [ 4 ]

4 голосов
/ 26 ноября 2010

Ну, этот вопрос не о самом AJAX, а о Microsoft UpdatePanel на основе AJAX, который является сложным зверем. Простое объяснение того, как работает UpdatePanel, заключается в том, что все работает так же, как и обычная «постбэк» на всю страницу (ViewState отправляется на сервер, DOM на стороне сервера воссоздается, все события жизненного цикла событий страницы выполняются) за исключением того, что в самом конце ответ, представленный клиенту, включает только подмножество HTML, необходимое для обновления содержимого UpdatePanel, из которого был инициирован запрос AJAX. В игре есть некоторые дополнительные тонкости и сложности, но это основная идея.

2 голосов
/ 26 ноября 2010

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

   if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
   {

   }
1 голос
/ 26 ноября 2010

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

Но, да, панели обновления по-прежнему вызывают большую часть жизненного цикла страницы на стороне сервера. Если вы ищете, чтобы избежать жизненного цикла страницы, методы страницы могут быть на ваш вкус. Они требуют возиться с Javascript, хотя.

http://forums.asp.net/p/1070297/1571597.aspx

0 голосов
/ 26 ноября 2010

Во время PostBack все события жизненного цикла страницы выполняются снова, и страница заново создается и повторно отправляется клиенту.

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

Вы можете использовать свойство Page.IsPostBack, чтобы проверить, выполняете ли вы первоначальную загрузку страницы или обратную передачу.например, делать что-то только при первой загрузке страницы:

if (!Page.IsPostBack)
{
    //doSomething
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...