2009-02-18 2 views
1

Я использую ASP.Net MVC для создания веб-сайта, который должен выполнить некоторую обработку (5 - 10 секунд), прежде чем он сможет вернуть представление пользователю. Вместо того, чтобы оставлять пользователя, смотрящего на ледниковый индикатор прогресса, я хотел бы показать какую-то анимацию «Подождите, мы вернемся», чтобы они заинтересовались.Загрузка страницы для ASP.Net MVC

Кто-нибудь знает хороший подход к достижению этого?

(я нашел this ответ, но его не совсем то, что мне нужно, это использует jQuery для извлечения данных после возвращения представления. Я хотел бы показать «Пожалуйста, подождите», пока они ждут представления появляется)

Благодаря

+1

Я не вижу никакого способа сделать это без используя AJAX - я знаю, что это не то, что вы хотите услышать, но ASP.Net не отправит * никакой * части ответа до тех пор, пока обработка не будет завершена на сервере. В то время как jQuery AJAX сможет сделать это для вас после отправки ответа. –

ответ

5

Я думаю, что решение, которое вы ссылка будет работать для вас. Вам просто нужно, чтобы ваше начальное действие контроллера немедленно возвращалось с «пожалуйста, подождите сообщение», а затем вызов AJAX выполняет фактическое извлечение содержимого на основе вашей обработки. Если запрос действительно занимает 5-10 секунд, вам также может потребоваться отрегулировать значение тайм-аута по запросу AJAX, чтобы он смог выполнить. Я не знаю, что такое таймаут по умолчанию, но может быть меньше того, что вам нужно.

EDIT Пример:

Посмотреть код:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type: "POST", 
      url: '<$= Url.Action("GetSlowData","Controller") %>', 
      data: 'id=<%= ViewData["modelID"] %>', 
      timeout: 15000, // wait upto 15 secs 
      success: function(content){ 
       $("#container").html(content); 
      } 
     }); 
    }); 
</script> 

... 

<div id="#container"> 
    Please wait while I retrieve the data. 
</div> 

Контроллер

public ActionResult ViewMyData(int id) 
{ 
    ViewData["modelID"] = id; 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetSlowData(int id) 
{ 
    var model = ... do what you need to do to get the model... 

    return PartialView(model); 
} 

Вам также потребуется частичный вид (ViewUserControl), который принимает модель и визуализирует вид модели. Обратите внимание, что это не является полным - вам нужно будет добавить обработку ошибок, вы можете подумать о том, что произойдет, если javascript не включен, ...

+0

Я так не думаю. Другое решение требует, чтобы я возвращал данные, а затем обновлял свое представление этими данными (используя jQuery). Я хочу вернуть представление (т. Е. Return View («MySlowData», myViewData)) –

+1

Я обновлю пример. – tvanfosson

+0

Большое спасибо, гораздо яснее с примером. Я не знал, что вы можете отобразить частичный вид в существующем виде (т. Е. $ («# Container»). Html (content);), но я полагаю, что если частичный вид просто возвращает Html, почему бы и нет! Еще раз спасибо. –

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