在执行大型操作时向视图发送更新的策略

时间:2012-02-16 21:39:21

标签: asp.net .net asp.net-mvc-3 view

对于你们中的许多人来说,这可能是一个非常简单的问题 - 但是当服务器执行耗时的操作时,我一直试图找出一种在View中呈现更新的策略。

情况就是这样。我有一个视图,其中有一个按钮,表示“批准”。此批准需要调用某种Action或某种类型的后进程来执行可能需要20-30秒的繁重操作。

在此期间,我想用某种处理gif动画更新视图,并附加文本,如“执行操作A”,“执行操作B”等。

实现这一目标的最佳策略是什么?

3 个答案:

答案 0 :(得分:2)

这里有一个你可能不喜欢的答案:甚至不想尝试从服务器获得一些“进度更新”。

从商业角度看这个任务。提供一些反馈的目的是给用户一些温暖和模糊的感觉,他们没有被遗忘,他们要求他们的计算机做的任务没有被放弃。您愿意承担多少费用?

最简单的此类设备是简单的进度条。尽管大多数体验用户都不相信它会告诉他们任务完成时,他们仍然相信如果它正在移动某些事情

我的解决方案是将异步操作发送到服务器以关闭操作。然后显示完全由javascript管理的进度条。它开始迅速但随着它的进展而减慢,以至于它实际上永远不会完成,但似乎确实取得了一些进展。当异步操作完成时,将进度条显示为完成,然后将其删除。

其他解决方案的成本要高得多,但是如果不是实际上是负面的话,这种方法的好处几乎可以忽略不计,毕竟它们实施起来很复杂并且更容易出错。

答案 1 :(得分:1)

我必须承认我没有尝试,但我愿意这样做。

我认为SignalR可能是个不错的选择。

答案 2 :(得分:0)

虽然这在理论上听起来不错,但我会将其作为后台操作,然后在任务完成时通过电子邮件或短信向用户发送通知。

否则你需要

  • 在服务器上设置缓存(不是asp.net缓存)以存储长时间运行进程的当前状态
  • 设置js计时器以轮询服务器
  • 使用存储在缓存中的当前状态更新ui。

并非不可能,但很多活动部件。