【问题标题】:Strategy for sending updates to a view while performing a large operation执行大型操作时向视图发送更新的策略
【发布时间】:2012-02-16 21:39:21
【问题描述】:

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

就是这样。我有一个视图,其中有一个按钮,上面写着“批准”。这个批准需要调用某种 Action 或 backgroundprogress 来执行可能需要 20-30 秒的繁重操作。

在那段时间里,我想用某种处理 gif 动画来更新视图,并附加诸如“执行操作 A”、“执行操作 B”等文本。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    最简单的此类设备是不起眼的进度条。尽管大多数有经验的用户不相信它会告诉他们什么时候任务将完成,但他们仍然相信它是否正在发生移动某事

    我的解决方案是将异步操作发布到服务器以启动操作。然后显示一个完全由 javascript 管理的进度条。它开始迅速,但随着它的进展而减慢,以至于它永远不会真正完成,但似乎正在取得一些进展。异步操作完成后,将进度条短暂显示为已完成,然后将其删除。

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

    【讨论】:

    • 我同意。拥有这种反馈的价值小于成本。我最终可能会使用 Ajax.ActionLink 功能来启动进程并在处理时显示某种动画。然后最后用消息“操作完成”或其他内容覆盖
      部分:)
    【解决方案2】:

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

    我认为SignalR 可能是一个不错的尝试。

    【讨论】:

    • 请做。期待听到您的解决方案 :) 就像我在 Anthonys 的帖子中评论的那样 - 这可能太复杂了,我不会这样做 - 但是 - 嘿 - 让讨论保持开放,看看是否有聪明的人有聪明的解决方案到这个。
    【解决方案3】:

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

    否则你需要

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

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

    【讨论】:

    • 电子邮件或短信是否需要 30 秒的操作?
    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多