ASP.Net MVC 加载进度指示器

发布于 2024-07-09 00:59:48 字数 361 浏览 5 评论 0原文

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

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

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

I have an MVC Controller that runs through a process, sets some View Data, and then returns the results of this data back to the user in a View. The process time is dependent on the amount of data that is being processed. I need a good way to display an animated .gif within the View while the process is running, letting the user know that something is going on.

I've looked at various AJAX methods and partial views but still cannot find a good way to accomplish this. What I really wished I could do was have an ActionFilter that would return a View or Partial View during the OnActionExecuting event that displays this animated .gif, then once the Controller completed processsing and returned the ViewData, the view or partial view with the actual View Data could be displayed.

It also seems like jQuery would be able to provide a nice asynchronous way to call the controller action in the background and then render the View. Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧时模样 2024-07-16 00:59:48

在您的控制器中:

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。

In your controller:

public JsonResult GetSomething(int id)
{
    return Json(service.GetSomething(id));
}

In the view (javascript, using 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()
    });
});

Note that this assumes a route where 'id' comes after action. The 'x' parameter on the action is to defeat aggressive caching in IE.

In the view (markup):

<img id="loading" src="images/ajax-loader.gif" alt=""/> 
<!-- use a css stlye to make display:none -->

Get loader gifs here.

Also note that you do not have to do this with Json. You can fetch other things like HTML or XML from the controller action if you prefer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文