gpt4 book ai didi

c# - asp.net 计时器和 response.redirect

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:41 26 4
gpt4 key购买 nike

我有一个计时器来检查某些条件,当条件变为真时,它必须重定向页面

     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 header 来告诉客户端此时需要加载不同的页面。

此外,像这样从页面内部实例化一个 Timer 可能是个坏主意——除了它包含无效响应对象这一事实之外,即使访问者关闭页面,就系统资源而言,它是一个相当昂贵的对象。

另一方面,如果您只想在后台检查该条件,请在 Application_OnStart 事件的 global.asax 中设置计时器并更新它一个 volatile bool 变量;在要有条件重定向的页面开头检查此变量。

编辑:如果您希望在每个显示该页面的浏览器中检查每个打开的窗口的条件,您将必须使用脚本或刷新。让您的 JavaScript 间隔计时器定期尝试导航到一个特殊的“条件重定向器”页面可能是最简单的,该页面仅包含以下代码,用于检查条件并重定向或单独离开页面:

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

请注意,导航到返回 204“无内容”状态的 URL 会导致浏览器保留现有页面。此外,请记住,此重定向器页面会受到大量攻击,因此请保持轻量级检查。

关于c# - asp.net 计时器和 response.redirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com