ASP.NET Ajax显示UpdateProgress控件的最短时间

时间:2009-09-29 01:10:25

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

有时我的ajax请求太快,以至于用户没有意识到进行了ajax调用。所以我想强制UpdateProgress控件显示至少大约一段时间,即使ajax请求已经finsihed。

例如:

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

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

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

修改

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

由于

3 个答案:

答案 0 :(得分:1)

我在内联网网站上遇到了同样的问题,其中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网站页面“Using Animations”。

答案 1 :(得分: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

答案 2 :(得分: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);