ASP.net не может обновить страницу из обработчика событий - PullRequest
0 голосов
/ 09 марта 2009

У меня есть кнопка ссылки на странице, обработчик события для события click этой кнопки вызывает метод для объекта, который, в свою очередь, выполняет вызов веб-службы, когда веб-служба возвращает объект, запускает событие и обработчик события. на странице codebehind обновляет ярлык на странице. По какой-то причине ярлык не отображает сообщение.

Это сводит меня с ума, и я ничего не могу найти об этом в Google. любая помощь будет оценена.

Веб-служба вызывается асинхронно, но поток блокируется до тех пор, пока он не вернется. и событие pre render меток вызывается после установки его текста обработчиком события прокси-объектов.

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

Ответы [ 3 ]

3 голосов
/ 09 марта 2009

Вот что происходит:

  • Пользователь нажимает на кнопку ссылки
  • Браузер отправляет запрос обратной передачи на веб-сервер
  • Веб-сервер создает новый экземпляр класса вашей страницы и запускает новый жизненный цикл страницы
  • Жизненный цикл страницы выполняет все обычные операции загрузки.
  • Жизненный цикл страницы достигает стадии обработки события и запускает событие щелчка
  • Событие click вызывает веб-службу через объект «proxy», который вы описали
  • Прокси-объект асинхронно вызывает веб-сервис и возвращает
  • Событие click возвращает , поскольку ему больше нечего делать, освобождая ASP.Net для продолжения перемещения по жизненному циклу страницы.
  • Жизненный цикл страницы заканчивается, поэтому страница отображается в браузере
  • Пользователь видит новую страницу, но метка такая же, потому что вызов веб-службы еще не завершен
  • Вызов веб-службы возвращается к вашему прокси-объекту, который вызывает завершенное событие
  • Ваш обработчик событий обновляет свойство текста метки в классе вашей страницы , которое уже было обработано
  • Экземпляр вашей страницы из этого запроса удален.

Обновление:
ОП обновил свой вопрос после того, как я разместил его, чтобы указать, что время жизненного цикла синхронизировано. Поэтому вместо этого я укажу, что элементы управления в ASP.Net не являются потокобезопасными, но событие завершения веб-службы вызывается из потока, используемого в фоновом режиме, для выполнения асинхронного запроса, а не из исходного потока. Вы должны Invoke элемент управления при установке свойства.

0 голосов
/ 09 марта 2009

Работает ли веб-служба асинхронно? Может быть, событие завершения веб-службы запускается после отображения страницы? Вы отладили, чтобы убедиться, что значение метки установлено?

0 голосов
/ 09 марта 2009

У вас есть это в вашем событии Page_Load?

if (Page.IsPostBack)
{
   return;
}

Если нет, метка может быть повторно инициализирована после обратной передачи.

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