2009-01-03 81 views
1

我有一個頁面,當某些操作出錯時,我想啓動計時器,等待30秒,停止計時器並重試操作。每次計時器啓動時,我都需要通過更改標籤的文本來通知用戶。如何在asp.net中設置一個計時器

我該怎麼辦?

+0

你能發表一些代碼嗎?計時器是一個JavaScript計時器嗎? – M4N 2009-01-03 15:04:14

回答

3

如果我理解正確的話,我認爲你應該使用客戶端(JavaScript)定時器。你不能爲此使用服務器端定時器。

當您檢測到錯誤條件時,相應地更新標籤並將其顯示給用戶。同時你調用一個客戶端定時器,它會在30秒後回發。

E.g.將下面的計時器代碼到你的頁面:

<script> 
    function StartTimer() 
    { 
     setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds 
    } 
    function DoPostBack() 
    { 
     __doPostBack(); // invoke the postback 
    } 
    </script> 

在錯誤條件的情況下,你必須確保客戶端定時器將啓動:

if (error.Code == tooManyClientsErrorCode) 
{ 
    // add some javascript that will call StartTimer() on the client 
    ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true); 
    //... 
} 

我希望這幫助(代碼未經測試,因爲我現在沒有可用的Visual Studio)。

更新:

以 「模擬」 點擊一個按鈕,你必須傳遞到按鈕的客戶端ID爲__doPostBack()方法,如:

function DoPostBack() 
{ 
    var buttonClientId = '<%= myButton.ClientID %>'; 
    __doPostBack(buttonClientId, ''); // simulate a button click 
} 

對於一些其他的可能性,請參閱以下問題/回答:

+0

這不是我想要做的。當我發現一個錯誤的情況我顯示消息給用戶(這是那一刻,我想我可以回發 - 刷新網站,這樣的新文本將顯示)和30秒後重試失敗的操作 - 這工作正常。 – agnieszka 2009-01-03 16:54:00

1

從客戶端強制回發,你可以直接調用__doPostBack方法

它有兩個參數,EVENTTARGET和EVENTARGUMENT;因爲你在正常的asp.net循環之外進行這個調用,所以你需要在你的頁面加載事件(或init,你的選擇)上檢查IsPostBack - 如果它是回發,那麼你需要看看滾動的那兩個參數作爲表單元素(Request.Form [「__ EVENTTARGET」])。檢查他們的價值,看看是否回發從你的電話或其他控件之一,來到如果這些比賽的價值,你從客戶端傳遞什麼,然後根據需要更改標籤測試