有时我的ajax请求太快,以至于用户没有意识到进行了ajax调用。所以我想强制UpdateProgress控件显示至少大约一段时间,即使ajax请求已经finsihed。
例如:
John浏览网站,ajax调用需要2秒才能完成。我只希望UpdateProgress控件显示2秒钟。
Mary也浏览网站,但ajax调用需要> 0.5秒所以我想显示UpdateProgress控件至少1秒钟。
有人对如何做到这一点有任何想法吗?
修改
我发现Telerik提供的AjaxLoadingPanel控件具有此功能。它有一个名为MinDisplayTime的属性,可以做到这一点。如果使用标准(免费)asp.net ajax控件知道如何做到这一点会很高兴。
由于
答案 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);