2010-12-08 56 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");