2012-04-12 3 views
1

У меня есть страница ASP.NET, которая собирает некоторые критерии от пользователя с помощью элементов управления ASP.NET, а затем на основе значений элементов управления использует HttpContext.Current.Response для генерации вывода в CSV с веб-страницы.Прогресс обновления ASP.NET при использовании HttpContext

Проблема, с которой я сталкиваюсь, заключается в том, что для моего ответа может потребоваться около минуты. Таким образом, я хотел бы реализовать индикатор выполнения некоторого рода с момента, когда мой пользователь отправит запрос до момента доставки CSV. К сожалению, я не могу заставить свой скрытый div отображать и скрывать по требованию с EnablePartialRendering, установленным в false в ScriptManager (это необходимо для заполнения других элементов управления на странице).

Есть ли способ реализовать индикатор выполнения (на сервере или на стороне клиента) для контроля состояния вывода HttpContext?

ответ

0

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

Мой любимый JavaScript (поддерживает все основные плагины), чтобы делать то, что вы задаете, - Plupload :

Примеры можно увидеть here.

0

Нет. По крайней мере, не так, как вы думаете. Если вы собираетесь отправить файл обратно пользователю, то вы не можете заранее отправить какой-либо HTML-код пользователю. Вы должны отправить файл как автономный ответ.

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

Это усложняет процесс и требует намного больше работы. Вопрос, который вы должны задать, это действительно ли это прогресс?

EDIT:

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

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

+0

Но если анимация на основе клиента, как я буду знать, когда мой сервер на основе HttpContext сделано в ответ, так что я могу удалить анимация? – kittyhawk

+0

@kittyhawk - если вы делаете ajax, то вы должны начать загрузку с помощью какого-либо метода ajax. Когда этот метод вернется, вы можете выполнить обратный вызов, чтобы скрыть анимацию. –

0

Если вы используете Ajax это лучший способ сделать

$('#loadinganimation') 
    .hide() // hide it initially 
    .ajaxStart(function() { 
     $(this).show(); 
    }) 
    .ajaxStop(function() { 
     $(this).hide(); 
}); 
+0

@ MystereMan-Извините, я этого не видел. Я обновил. – coder

Смежные вопросы