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