我有一个MVC控制器运行一个进程,设置一些View数据,然后在View中将该数据的结果返回给用户.处理时间取决于正在处理的数据量.在进程正在运行的过程中,我需要一个很好的方式在View中显示一个动画的.gif,让用户知道发生了什么.
我已经看过各种AJAX方法和部分视图,但仍然找不到一个很好的方式来实现这一点.我真正希望我可以做的是有一个ActionFilter,它将在OnActionExecuting事件中返回一个视图或部分视图,显示此动画.gif,然后一旦Controller完成处理并返回ViewData,视图或部分视图与实际的视图可以显示数据.
解决方法
在你的控制器中:
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 -->