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

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

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

Также кажется, что 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 -->

Получить gers загрузчика здесь.

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