Как обновить страницу из рабочего потока

У меня есть страница ASPX, которая запрашивает из базы данных. Когда у нас есть набор данных, он привязывается к сетке и отображается на странице. Все это происходит в событии Page_Load.

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

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

Если я выполняю запрос в рабочем потоке, а затем вызываю метод Update в UpdatePanel с gridview как его часть, это не сработает. Ничего не произошло.

Есть мысли или помощь? Спасибо.


person IceFossil    schedule 30.07.2010    source источник


Ответы (1)


Что ж, это хороший вопрос. Лично у меня есть два очень похожих метода для этого:

  1. Имейте сценарий Java, который будет перезагружать UpdatePanel с коротким интервалом. Это создаст серию обратных сообщений на сервер. Во время каждой обратной передачи вы должны проверять свой рабочий поток и немедленно возвращаться с отчетом о состоянии, обычно одним из error, pending, success + data
  2. С помощью java-скрипта сделайте асинхронный запрос к веб-сервису, который будет блокироваться до тех пор, пока не будут получены данные. Этот метод не вызывает задержки по сравнению с предыдущим (время между опросами), но может пострадать из-за отношения некоторых браузеров / серверов к зависанию открытых соединений. Обычно это решается введением некоторого интервала (скажем, 1 минута), так что зависший запрос вернется с сообщением типа need more time, и в этом случае java-скрипт должен просто повторить запрос.
person ULysses    schedule 30.07.2010
comment
Можете ли вы уточнить 1 на простом примере? - person IceFossil; 30.07.2010