2011-07-22 146 views
1

我正在使用ASP.NET 4.0。我有一個ajax計時器控制在母版頁上繼續運行,在我的內容頁面上我有3個文本框控件和一個提交按鈕。我想延遲頁面處理20秒,只要有人點擊提交按鈕,但計時器不應該停止它應該繼續運行。這個怎麼做 ?延遲頁面處理幾秒鐘

+2

請發表您的碼。 – Oded

+0

你想完成什麼? Thread.sleep()方法?延遲頁面處理是什麼意思?服務器端或客戶端。這是爲了調試目的嗎? –

+1

所以你會延遲頁面回發或實際的服務器端邏輯執行? – sll

回答

0

你必須設置Timer1.Enabled = false;在finally塊

protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     try 
     { 
      // your code ............ 
     } 
     catch 
     {    
     } 
     finally 
     { 
      divLoading.Visible = false; 
      Timer1.Enabled = false; 
     } 
    } 
0

我在你這裏需要有點不清楚 - 但我想你問的就是你想要的按鈕被點擊在客戶端,當您的計時器仍在運行時,客戶端有20秒的等待時間,然後提交頁面進行處理。如果這是你想要的,它必須完全由客戶端驅動 - 定時器不在服務器代碼中「運行」。這一切都是基於你在談論的AJAX定時器的假設......

如果這是你問什麼,下面的代碼應該讓你有:

 function onButtonClick(e) { 
      var evt = Sys.UI.DomEvent.isInstanceOfType(e) ? e : new Sys.UI.DomEvent(e); 
      if(evt.target["_doClick"] === true) { 
       // just let the event happen 
       // (still w/ button disabled to prevent double click) 
       evt.target["disabled"] = "disabled"; 
       evt.target["_doClick"] = false; 
       alert('the real click'); 
      } else { 
       evt.target["disabled"] = "disabled"; 
       evt.target["_doClick"] = true; 
       evt.preventDefault(); 
       evt.stopPropagation(); 
       var t = evt.target; 
       setTimeout(function() { t["disabled"] = ""; t.click(); }, 20000); 
      } 
     } 
+0

thanx爲您的答覆,但我所有的代碼是在服務器端,提交按鈕實際上是一個服務器端按鈕控件,並在該按鈕的單擊事件我想要處理頁面等待或暫停幾秒鐘,但計時器應保持運行。 – Vicky

+0

嗨Vicky - 如果你正在運行一個ASP.NET Ajax計時器,實際發生的事情是控制發出反覆從客戶端調用動作所需的JavaScript。如果你想延遲服務器端的處理,你可以調用System.Threading.Thread.Sleep(20000),但我不會推薦這種方法。更新onButtonClick返回false並將OnClientClick =「return onButtonClick(window.event)」放置在演示文稿文件或代碼隱藏文件中最好。這樣,你在客戶端,而不是服務器... – Brian

+0

Vicky - 在閱讀你的其他答案,我不能強調,在ASP.NET中,瀏覽器中發生的任何事情都不是服務器端。您的計時器不在服務器上「運行」。服務器在開火前不計秒。客戶端正在計數秒之前 - 所有的服務器正在發送客戶端代碼來創建計時器 - 如果您想讓計時器繼續運行,您必須從客戶端處理此事件並延遲迴發,或者你必須阻止服務器上的線程,這在負載下不會很好。 – Brian