2010-12-08 51 views
1

我有一些檢查條件,作爲條件成爲真正具有重定向的頁面asp.net定時器和Response.Redirect的

 protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      /* Thread th = new Thread(new ThreadStart(OtherThread)); 
      th.Start();*/ 
      System.Timers.Timer t = new System.Timers.Timer(9000); 
      t.Enabled = true; 
      t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); 
      Session["total"] = 0; 
     } 
    } 
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
if(db.getvalue()==true) 
    response.redirect("abc.aspx"); //notworking 
    //server.transfer("abc.aspx"); //not working 
} 

我如何可以重定向我的網頁一個定時器。有沒有什麼辦法可以通過js或其他方式來完成?

+0

也許db.getvalue()爲false? – Greg 2010-12-08 06:46:11

+0

澄清問題:您有一個頁面,並在後臺有一個與任何訪問者無關的計時器。該頁面將正常投放。當計時器倒計時時,您希望開始將訪客從該頁面重定向到另一頁面。那是對的嗎? – Poni 2010-12-08 06:48:43

+0

@poni:是的,我有幾乎相同的情況。那麼在這種情況下我該怎麼做。 – 2010-12-08 06:50:56

回答

5

一旦你發出一個頁面,發送重定向太遲了:響應已經發送,所以你有的響應對象不再有效。

相反,你需要處理它無論是在東西的客戶端腳本代碼像

window.setTimeout(function() { window.location.href = "blah.aspx"; }, 9000); 

或者在響應設置Refresh頭,告訴客戶端,這將需要當時加載不同的頁面。

此外,實例化從這樣的一個頁面內Timer可能是一個壞主意 - 除了這個事實,它所持有的無效響應對象,計時器會流連即使訪問者關閉網頁,這是一個相當昂貴的對象在系統資源方面。另一方面,如果您只是想在後臺檢查該條件,請從Application_OnStart事件中設置global.asax中的計時器,並讓它更新volatile布爾變量;否則,請更新volatile布爾變量。在你想有條件地重定向的頁面的開頭檢查這個變量。

編輯:如果你想檢查的條件爲在顯示頁面上每個瀏覽器的每個打開的窗口中,你將不得不使用任何腳本或Refresh。也許,最簡單有你的JavaScript計時器定期嘗試導航到一個特殊的「有條件的重定向器」頁包含下面的代碼,檢查的條件,要麼重定向或獨自離開頁面的ONLY:

<% 
    if (db.getvalue()) // saying "== true" is redundant 
     response.Redirect("abc.aspx"); 
    else 
     response.StatusCode = HttpStatusCode.NoContent; 
%> 

注導航到返回204「無內容」狀態的URL會導致瀏覽器單獨離開現有頁面。另外,請記住,這個重定向器頁面將被大量轟炸,因此請保持輕量級的檢查。

0
<script language="javascript"> 
    function redirectFunction() { 
     document.location.href = 'www.yourpage.com'; 
    } 
    </script> 
<body onload="javascript:setTimeout('redirectFunction();', 1000)"> 

然後負載可以處理的邏輯,如果db.getvalue()=真然後重定向到頁面。
爲了避免整個頁面刷新,做一些使用javascript進行Ajax調用的Google搜索。

0
string myStringVariable = "Password Update!"; 
     ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + myStringVariable + "');", true); 

     Response.AddHeader("REFRESH", "1;URL=Login.aspx");