加载页面ASP.Net MVC
问题描述:
我正在使用ASP.Net MVC创建一个网站,需要做一些处理(5-10秒),然后才能将视图返回给用户。我不想让用户盯着冰河进度条,而想展示某种“请稍等/我们马上回来”的动画gif,以保持他们的兴趣。加载页面ASP.Net MVC
有没有人知道一个很好的方法来实现这一目标?我发现this答案,但它不是我所需要的,它使用jQuery来获取数据,一旦视图已经返回。我想显示“请稍候”,而他们正在等待视图出现)
谢谢
答
我认为你引用的解决方案将为你工作。您只需要让您的初始控制器操作立即返回“请等待消息”,然后让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
我看不到任何方式没有这样做使用AJAX--我知道这不是你想听到的,但ASP.Net不会发送任何*部分的响应,直到服务器上的处理完成。尽管在发送响应之后,jQuery AJAX将能够为您做到这一点。 – 2009-02-18 22:16:17