我有一个Timer来检查某些条件,当条件成立时,它必须重定向页面
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
}
Run Code Online (Sandbox Code Playgroud)
我该如何重定向我的页面.有什么方法可以通过js或其他任何方式完成吗?
发布页面后,发送重定向为时已晚:响应已经发送,因此您拥有的响应对象不再有效.
相反,你需要在客户端脚本代码中使用类似的东西来处理它
window.setTimeout(function() { window.location.href = "blah.aspx"; }, 9000);
Run Code Online (Sandbox Code Playgroud)
或者通过Refresh在响应中设置标题来告诉客户端当时需要加载不同的页面.
此外,Timer从页面内部实例化这样的内容可能是一个坏主意 - 除了它持有无效的响应对象之外,即使访问者关闭页面,计时器也会挂起,而且它是一个相当昂贵的对象.系统资源.
另一方面,如果您只想在后台检查该条件,请global.asax从Application_OnStart事件中设置计时器并让它更新volatile布尔变量; 在要有条件地重定向的页面的开头检查此变量.
编辑:如果你想在显示页面的每个浏览器中检查每个打开的窗口的条件,你将不得不使用脚本或a Refresh.也许,最简单有你的JavaScript计时器定期尝试导航到一个特殊的"有条件的重定向器"页包含下面的代码,检查的条件,要么重定向或独自离开页面的ONLY:
<%
if (db.getvalue()) // saying "== true" is redundant
response.Redirect("abc.aspx");
else
response.StatusCode = HttpStatusCode.NoContent;
%>
Run Code Online (Sandbox Code Playgroud)
请注意,导航到返回204"无内容"状态的URL会导致浏览器单独保留现有页面.此外,请记住,此重定向器页面将被大量轰炸,因此请保持您的检查轻量级.
| 归档时间: |
|
| 查看次数: |
7056 次 |
| 最近记录: |