1

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

例如:

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

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

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

编辑

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

谢谢

4

3 回答 3

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 工作,最好还是拥有它,如果您还没有的话。

有关在<OnUpdating>标记中放置的内容等,请参阅 Asp.Net Ajax Control Toolkit 站点页面“使用动画”。

于 2009-09-30T08:45:36.097 回答
0

您可以通过跟踪服务器端代码执行的时间来解决后者(或者通过测量 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);
于 2009-11-05T10:09:35.443 回答
0
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

于 2009-09-29T01:14:17.967 回答