我有一个MVC控制器,它运行一个进程,设置一些View Data,然后在View中将这些数据的结果返回给用户.处理时间取决于正在处理的数据量.我需要一个很好的方法在进程运行时在View中显示动画.gif文件,让用户知道某些事情正在发生.
我查看了各种AJAX方法和部分视图,但仍然无法找到实现此目的的好方法.我真正希望能做的是在OnActionExecuting事件期间返回一个View或Partial View的ActionFilter,它会显示这个动画.gif,然后一旦Controller完成处理并返回ViewData,视图或局部视图与实际的View可以显示数据.
似乎jQuery能够提供一种很好的异步方式来在后台调用控制器动作然后渲染View.任何帮助,将不胜感激.
在你的控制器中:
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中击败激进的缓存.
在视图(标记)中:
在这里获取装载机GIF .
另请注意,您不必使用Json执行此操作.如果您愿意,可以从控制器操作中获取HTML或XML等其他内容.