ASP.Net MVC正在加载进度指示器

时间:2008-11-13 14:13:03

标签: asp.net-mvc indicator

我有一个MVC Controller,它运行一个进程,设置一些View Data,然后在View中将这些数据的结果返回给用户。处理时间取决于正在处理的数据量。我需要一个很好的方法在进程运行时在View中显示动画.gif文件,让用户知道某些事情正在发生。

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

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

1 个答案:

答案 0 :(得分:25)

在您的控制器中:

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 here

另请注意,您不必使用Json执行此操作。如果您愿意,可以从控制器操作中获取HTML或XML等其他内容。