ASP.NET Ajax Показать элемент управления UpdateProgress за минимальное время
Иногда мой ajax-запрос настолько быстр, что пользователь не понимает, что был сделан ajax-вызов. Поэтому я хотел бы заставить элемент управления UpdateProgress отображаться в течение как минимум времени, даже если запрос ajax закончился.
Например:
Джон просматривает сайт, и вызов ajax занимает 2 секунды. Я только хочу, чтобы элемент управления UpdateProgress отображался в течение этих 2 секунд.
Мэри также просматривает сайт, но вызов ajax занимает> 0,5 секунды. Поэтому я хочу отображать элемент управления UpdateProgress не менее 1 полной секунды.
У кого-нибудь есть идеи, как это сделать?
редактировать
Я обнаружил, что элемент управления AjaxLoadingPanel, предлагаемый Telerik, обладает этой способностью. У него есть свойство MinDisplayTime, которое делает именно это. Было бы неплохо узнать, как это сделать, используя стандартные (бесплатные) элементы управления ajax asp.net.
Спасибо
3 ответа
У меня была такая же проблема, работая на сайте интрасети, где UpdatePanel
содержимое изменилось так быстро, что я не мог определить, произошло ли обновление без отладки или проверки базы данных.
Я решил эту проблему, позволив UpdatePanel сделать то же, что и раньше, но использовать UpdatePanelAnimationExtender
например, кратковременное мигание изменения цвета фона, прежде чем вернуться к нормальному состоянию, создавая у пользователя впечатление, что действие произошло. Если это происходит быстро, скажем, 0,3 секунды, и выбран соответствующий цвет действия, это может быть очень эффективным.
<ajaxToolkit:UpdatePanelAnimationExtender ID="myUpdatePanelExtender" runat="server" TargetControlID="myUpdatePanel">
<Animations>
<OnUpdating> ... </OnUpdating>
<OnUpdated> ... </OnUpdated>
</Animations>
</ajaxToolkit:UpdatePanelAnimationExtender>
Вам понадобится AJAX Control Toolkit, но если вы работаете с Asp.Net AJAX, вам будет лучше иметь его, если вы этого еще не сделали.
Для того, чтобы разместить в <OnUpdating>
теги и т. д., см. страницу сайта Asp.Net Ajax Control Toolkit " Использование анимации".
Вы могли бы обойти последний, отслеживая время, необходимое для выполнения кода на стороне сервера (или, возможно, даже лучше, измеряя время выполнения 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);
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