2008-10-20 2 views
5

Страница выполняет ряд задач и требует много времени для обработки. Мы хотим дать пользователю обратную связь по мере завершения каждой задачи.Пожалуйста, подождите страницу в ASP.NET MVC

В WebForms ASP.NET мы использовали Response.Flush()

Каким образом вы бы подход это в ASP.NET MVC?

ответ

1

Вы можете сделать это на стороне клиента. На каждом шаге вы устанавливаете некоторую переменную сеанса с текущим шагом. Затем, вы делаете другое действие в контроллере, называете «GetProgress» и назначаете для него представление и URI.

В этом действии вы проверите этот сеанс и вернете текущий ход своей задачи. На стороне клиента создайте таймер (т. Е. SetTimeOut), и вы вызываете URI последующего действия контроллера каждый определенный промежуток времени - 1 секунду или около того. Вот и все.

1

Меня лично я хотел бы рассмотреть два optoins:

  • редирект ждать страницу (ы), затем огонь действиям
  • ли это Аякса стиль
5

Вы все еще можете использовать Response.Write() и Response.Flush() для какой бы статус вы хотите отправить вниз провод. Или если у вас есть ваш прогресс штуковина в пользовательском контроле, вы могли бы сделать что-то вроде:

this.PartialView("Progress").ExecuteResult(this.ControllerContext); 
this.Response.Flush(); 

из контроллера во время выполнения вашей длительной операции в методе действия контроллера.

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

+0

У меня есть частичный вид с текстом «please wait ...». И используйте этот подход. Но текст «please wait ...» остается на странице после загрузки. Легкий способ удалить его, когда окончательный вид возвращается из метода Action? – 2009-09-29 07:53:49

2

Есть два основных способа:

  1. Опрос страницу сервера, которая возвращает статус, то после того, как операция выполняется, перенаправляет на страницу результатов. MVC не имеет никакого отношения к этому пути, вам нужно будет использовать серверную переменную для хранения объектов/статуса - это способ, который более уместен для стандартного приложения Asp.NET, как вы (предположительно), используя переменные сеанса и т. Д. так или иначе.

  2. AJAX звонок от клиента к веб-сервису на сервере. Asp.NET MVC собирается катить структуру jQuery, поэтому используйте ее для вызова клиента и обработки событий для ответа. Это будет больше в духе MVC, который не должен/не должен использовать состояние сеанса и т. Д.

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