2009-09-29 28 views
1

有時我的ajax請求太快以至於用戶沒有意識到發出了ajax調用。所以我想強制UpdateProgress控件至少顯示大約一段時間,即使ajax請求已經過了。ASP.NET Ajax顯示UpdateProgress控件的最短時間量

例如:

約翰瀏覽該網站,並在Ajax調用需要2秒鐘才能完成。我只想讓UpdateProgress控件顯示2秒鐘。

瑪麗也瀏覽網站,但阿賈克斯調用需要> 0.5秒。所以我想顯示UpdateProgress控件至少1秒。

有沒有人有關於如何做到這一點的任何想法?

編輯

我已經發現,通過Telerik的提供的AjaxLoadingPanel控制有這個能力。它有一個名爲MinDisplayTime的屬性,它可以做到這一點。很高興知道如何使用標準(免費)asp.net ajax控件來做到這一點。

感謝

+0

其他人有什麼想法嗎? – Douglas 2009-09-29 19:41:43

回答

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

+0

嗨 - 這個解決方案的問題是,即使Ajax調用已經花了2秒鐘執行,我也會再增加3秒。我只想顯示更長時間的UpdateProgress控件* IF * Ajax調用花費的時間少於一定的時間。 – Douglas 2009-09-29 01:21:06

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控件工具包網站頁面'Using Animations'。

+0

+1以前沒有想過使用UpdatePanelAnimationExtender。儘管它沒有解決上述特定問題,但它爲我通知用戶發生了什麼事情提供了另一種選擇。 – Douglas 2009-10-07 22:08:02

+0

你當然是對的:它更多的是解決你的問題。但它還有其他的好處,例如:如果頁面上有幾個小的更新區域受到某個按鈕或控件的影響,那麼如果頁面繁忙,用戶可能不會注意到它們。一小段顏色,在0.5秒後消失,提醒他們頁面上的任何狀態改變 – 2009-10-08 01:02:45

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); 
相關問題