簡體   English   中英

asp.net計時器和response.redirect

[英]asp.net timer and 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或其他方式完成嗎?

發出頁面后,發送重定向已為時已晚:響應已發送,因此您擁有的響應對象不再有效。

相反,您需要在客戶端腳本代碼中用類似

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

或者在響應中設置一個Refresh標頭,以告知客戶端此時需要加載另一個頁面。

同樣,從這樣的頁面內部實例化一個Timer可能不是一個好主意-除了它持有無效的響應對象外,即使訪問者關閉了該頁面,該計時器也將徘徊,這是一個相當昂貴的對象系統資源。

另一方面,如果您只想在后台檢查該條件,請從Application_OnStart事件在global.asax設置計時器,並讓它更新volatile布爾變量; 在您要有條件重定向的頁面的開頭檢查此變量。

編輯:如果要檢查顯示該頁面的每個瀏覽器中每個打開的窗口的條件,則必須使用腳本或Refresh 最簡單的方法是讓您的JavaScript間隔計時器定期嘗試導航到特殊的“條件重定向器”頁面,該頁面僅由以下代碼組成,該代碼檢查條件並重定向或不重定向頁面:

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

請注意,導航到返回204“ No Content”狀態的URL會導致瀏覽器將現有頁面保留下來。 另外,請記住,此重定向器頁面將受到嚴重轟炸,因此請保持檢查輕便。

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

        Response.AddHeader("REFRESH", "1;URL=Login.aspx");
    <script language="javascript">
    function redirectFunction() {
        document.location.href = 'www.yourpage.com';
    }
    </script>
<body onload="javascript:setTimeout('redirectFunction();', 1000)"> 

然后,如果db.getvalue()= true,則可以在加載時處理邏輯,然后重定向到頁面。
為避免整個頁面刷新,請對通過JavaScript進行Ajax調用進行一些搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM