2009-02-18 166 views
1

我正在使用ASP.Net MVC创建一个网站,需要做一些处理(5-10秒),然后才能将视图返回给用户。我不想让用户盯着冰河进度条,而想展示某种“请稍等/我们马上回来”的动画gif,以保持他们的兴趣。加载页面ASP.Net MVC

有没有人知道一个很好的方法来实现这一目标?我发现this答案,但它不是我所需要的,它使用jQuery来获取数据,一旦视图已经返回。我想显示“请稍候”,而他们正在等待视图出现)

谢谢

+1

我看不到任何方式没有这样做使用AJAX--我知道这不是你想听到的,但ASP.Net不会发送任何*部分的响应,直到服务器上的处理完成。尽管在发送响应之后,jQuery AJAX将能够为您做到这一点。 – 2009-02-18 22:16:17

回答

5

我认为你引用的解决方案将为你工作。您只需要让您的初始控制器操作立即返回“请等待消息”,然后让AJAX调用根据您的处理实际检索内容。如果请求真的需要5-10秒,您可能还需要调整AJAX请求的超时值,以便能够完成。我不知道默认超时是什么,但可能比你需要的少。

编辑例子:

查看代码:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type: "POST", 
      url: '<$= Url.Action("GetSlowData","Controller") %>', 
      data: 'id=<%= ViewData["modelID"] %>', 
      timeout: 15000, // wait upto 15 secs 
      success: function(content){ 
       $("#container").html(content); 
      } 
     }); 
    }); 
</script> 

... 

<div id="#container"> 
    Please wait while I retrieve the data. 
</div> 

控制器

public ActionResult ViewMyData(int id) 
{ 
    ViewData["modelID"] = id; 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetSlowData(int id) 
{ 
    var model = ... do what you need to do to get the model... 

    return PartialView(model); 
} 

您还需要的是把你的模型和呈现视图的局部视图(ViewUserControl)的模型。请注意,这是不完整的 - 你需要添加错误处理,你可能要考虑如果javascript没有启用会发生什么,...

+0

我不这么认为。另一个解决方案需要我返回数据,然后用这些数据更新我的视图(使用jQuery)。我想返回一个视图(即返回视图(“MySlowData”,myViewData)) – 2009-02-18 17:32:35