15

我有一个 MVC 控制器,它通过一个进程运行,设置一些视图数据,然后在视图中将此数据的结果返回给用户。处理时间取决于正在处理的数据量。我需要一种在进程运行时在视图中显示动画 .gif 的好方法,让用户知道正在发生的事情。

我查看了各种 AJAX 方法和部分视图,但仍然找不到实现此目的的好方法。我真正希望我能做的是有一个 ActionFilter,它会在显示此动画 .gif 的 OnActionExecuting 事件期间返回一个视图或部分视图,然后一旦控制器完成处理并返回 ViewData,视图或部分视图与实际视图可以显示数据。

jQuery 似乎也能够提供一种很好的异步方式来在后台调用控制器操作,然后渲染视图。任何帮助,将不胜感激。

4

1 回答 1

26

在您的控制器中:

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。

于 2008-11-13T17:05:09.693 回答