【问题标题】:ASP.NET Ajax Show UpdateProgress control for minimum amount of timeASP.NET Ajax 在最短的时间内显示 UpdateProgress 控件
【发布时间】:2009-09-29 01:10:24
【问题描述】:

有时我的 ajax 请求非常快,以至于用户没有意识到进行了 ajax 调用。所以我想强制 UpdateProgress 控件显示最少的时间,即使 ajax 请求已经完成。

例如:

John 浏览了站点,ajax 调用需要 2 秒才能完成。我只希望 UpdateProgress 控件显示那 2 秒。

Mary 也浏览了该站点,但 ajax 调用需要 > 0.5 秒。所以我想显示 UpdateProgress 控件至少 1 整秒。

有人对如何做到这一点有任何想法吗?

编辑

我发现 Telerik 提供的 AjaxLoadingPanel 控件具有这种能力。它有一个名为 MinDisplayTime 的属性来做这件事。很高兴知道如何使用标准(免费)asp.net ajax 控件来做到这一点。

谢谢

【问题讨论】:

  • 还有其他人有什么想法吗?

标签: asp.net asp.net-ajax updateprogress


【解决方案1】:

我在 Intranet 站点上工作时遇到了同样的问题,其中 UpdatePanel 的内容变化如此之快,以至于如果不进行调试或检查数据库,我就无法判断是否发生了更新。

我解决这个问题的方法是让 UpdatePanel 像以前一样做它的事情,但是使用 UpdatePanelAnimationExtender 来短暂地闪烁背景颜色的变化,例如,在恢复正常之前,给用户的印象是发生了一个动作。如果这发生得很快,比如 0.3 秒,并且选择了合适的“动作”颜色,这会非常有效。

<ajaxToolkit:UpdatePanelAnimationExtender ID="myUpdatePanelExtender" runat="server" TargetControlID="myUpdatePanel">
     <Animations>
        <OnUpdating> ... </OnUpdating>
        <OnUpdated> ... </OnUpdated>
    </Animations>
</ajaxToolkit:UpdatePanelAnimationExtender>

您需要获得 AJAX 控制工具包,但如果您正在做 Asp.Net AJAX 工作,最好还是拥有它,如果您还没有的话。

有关在&lt;OnUpdating&gt; 标记等中放置的内容,请参阅 Asp.Net Ajax Control Toolkit 站点页面“Using Animations”。

【讨论】:

  • +1 之前没想过要使用UpdatePanelAnimationExtender。虽然它不能解决上述特定问题,但它提供了另一种通知用户某事发生的方式。
  • 您当然是对的:它更多地是解决您的问题的一个侧面解决方案。但它确实有其他优点,例如:如果页面上有几个小的更新区域受到某个按钮或控件的影响,如果页面繁忙,用户可能不会注意到它们。一小段颜色在 0.5 秒后褪色,提醒他们页面上的任何状态变化
【解决方案2】:
protected void Button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(3000);
    Label1.Text = DateTime.Now.ToString();
}

http://www.asp.net/Ajax/Documentation/Live/tutorials/ProgrammingUpdateProgress.aspx

【讨论】:

  • 嗨——这个解决方案的问题是,即使 Ajax 调用已经花费了 2 秒来执行,我也会增加 3 秒。我只想在较长的时间内显示 UpdateProgress 控件IF Ajax 调用花费的时间少于一定的时间。
【解决方案3】:

您可以通过跟踪服务器端代码执行的时间来解决后者(或者通过测量 ajax 执行时间甚至更好,但这更棘手)

想法是这样的

long startTime = System.DateTime.Now.Ticks;
//this process can take some time, especially when executed for the first time
//it gets data and binds it to a control
FetchData();
//if this takes not enough time, add an extra second to allow the UpdateProgress to display
if (TimeSpan.FromTicks(DateTime.Now.Ticks - startTime).TotalSeconds < 1)
            System.Threading.Thread.Sleep(1000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多