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