выводить строку из контроллера перед использованием «return» - PullRequest
1 голос
/ 24 апреля 2011

Это может быть странный вопрос, но у меня есть форма в MVC3, которая отправляет сообщения через json на контроллер, который выполняет много работы за кулисами.Пока все это происходит, я надеялся, что некоторые сообщения будут возвращены пользователю, обновляя их в текущем состоянии."связаться с сервером, отправить запрос" и т. д.

Кажется, что пока я могу сказать "вернуть Json (новый ...);"на страницу, я не хочу ничего возвращать, пока вся операция не будет завершена.Так как же я могу вернуть строки из контроллера на страницу перед вызовом финального возврата?Во-первых, это просто глупость?

Ответы [ 4 ]

2 голосов
/ 24 апреля 2011

это возможно, но я не думаю, что я бы сделал что-то подобное =)

в вашем методе действия, если запрос не является AjaxRequest, создайте фиктивное представление с сообщением о состоянии, которое вы установилиViewData (также установите данные формы в ViewData);в этом представлении отправьте ajaxRequest на тот же URL-адрес (при необходимости опубликуйте данные формы) и добавьте ответ на страницу.Если запрос AjaxRequest (метод проверки в действии), визуализируйте истинное представление с данными.

В некоторых случаях вы можете использовать некоторую кометную технику с очень длинными запросами (например, с некоторыми большими отчетами)

2 голосов
/ 24 апреля 2011

False,

То, что вы хотите, обычно называется «страницей ожидания».Я только что искал SOF для "json" страница ожидания "" и, к удивлению, ничего не нашел.Общий подход заключается в том, что ваш контроллер перехватывает http-запрос на «потенциально медленную для производства страницу» и немедленно возвращает «страницу ожидания» пользовательскому агенту.Типичная «страница ожидания» не дает никаких «реальных» отзывов о ходе выполнения вашего запроса;Я думаю, потому что для этого потребовалось бы много принципиально непродуктивных «поездок туда и обратно» (запросов) от клиента к серверу.Фактически, моя обычная страница ожидания - это просто сообщение «Обрабатывается ... Пожалуйста, подождите ...» над анимированным GIF-кодом «вращающейся шестерни».Ваш WaitPage содержит фрагмент java-скрипта, содержащий таймер, который периодически отправляет запрос «мы там еще» на сервер.Если запрос выполнен, контроллер (очевидно) перенаправляет первоначальный запрос на страницу результатов;и если нет, контроллер ничего не делает, ожидая следующего таймерного запроса от клиента.

Это сложный код, и я понимаю, что мой ответ НИЧЕГО не имеет отношения к JSON или MVC (как таковой);но это общий план того, как это обрабатывалось в прошлом ... и никто, кажется, не жаловался (слишком громко) на общий эффект.

Приветствия.Кит.

0 голосов
/ 18 июня 2012

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

0 голосов
/ 18 декабря 2011

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

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

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