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