Индикатор загрузки в ASP.Net MVC - PullRequest
14 голосов
/ 13 ноября 2008

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

Я рассмотрел различные методы AJAX и частичные представления, но все еще не могу найти хороший способ сделать это. Что я действительно хотел бы сделать, так это иметь ActionFilter, который бы возвращал представление или частичное представление во время события OnActionExecuting, которое отображает этот анимированный файл .gif, затем, когда контроллер завершил обработку и вернул ViewData, представление или частичное представление с фактическим представлением. Данные могут быть отображены.

Также кажется, что jQuery сможет обеспечить хороший асинхронный способ вызова действия контроллера в фоновом режиме, а затем отобразить представление. Любая помощь будет оценена.

1 Ответ

25 голосов
/ 13 ноября 2008

В вашем контроллере:

public JsonResult GetSomething(int id)
{
    return Json(service.GetSomething(id));
}

В представлении (javascript, используя JQuery):

$('#someLink').click(function()
{
    var action = '<%=Html.ResolveUrl("~/MyController.mvc/GetSomething/")%>' + $('#someId').val() + '?x=' + new Date().getTime();
    $('#loading').show()
    $.getJSON(action, null, function(something) 
    {
        do stuff with something
        $('#loading').hide()
    });
});

Обратите внимание, что это предполагает маршрут, по которому после действия указывается id. Параметр 'x' в действии должен победить агрессивное кэширование в IE.

В представлении (разметка):

<img id="loading" src="images/ajax-loader.gif" alt=""/> 
<!-- use a css stlye to make display:none -->

Получить GIF-файлы загрузчика здесь .

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

...