Индикатор загрузки в ASP.Net MVC

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

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

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

1 ответ

Решение

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

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, из действия контроллера, если хотите.

Другие вопросы по тегам