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

Другие вопросы по тегам