Пожалуйста, подождите страницу в ASP.NET MVC - PullRequest
5 голосов
/ 20 октября 2008

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

В веб-формах ASP.NET мы использовали Response.Flush()

Как бы вы подошли к этому в ASP.NET MVC?

Ответы [ 5 ]

5 голосов
/ 20 октября 2008

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

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

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

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

2 голосов
/ 20 октября 2008

Существует два основных способа:

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

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

2 голосов
/ 20 октября 2008

Я бы предложил использовать AJAX для отображения прогресса. Смотрите ссылки на идеи:

1 голос
/ 20 октября 2008

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

  • перенаправить на страницу ожидания, затем запустить действия
  • Сделай это в стиле ajax
1 голос
/ 20 октября 2008

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

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

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