[英]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.