注销页面上的RegisterStartupScript
时间:2020-03-06 14:32:35 来源:igfitidea点击:
我试图有一个注销页面,其中显示一条消息,然后重定向到登录页面。这是在ASP.net 2.0中。
我的Page_Load
中有这个:
ClientScript.RegisterStartupScript(typeof(Page), "pageredirect", JavascriptRedirect() );
这是我的重定向功能:
private string JavascriptRedirect() { StringBuilder sb = new StringBuilder(); sb.Append("<script type=\"text/javascript\" language=\"javascript\">"); sb.Append("var x = 5;"); sb.Append("var y = 1;"); sb.Append("function startClock(){"); sb.Append("x = x-y;"); sb.Append("t=setTimeout(\"startClock()\", 1000);"); sb.Append("if(x==0){"); sb.Append("window.location='login.aspx';"); sb.Append("clearTimeout(t);"); sb.Append(" }"); sb.Append(" }"); sb.Append("startClock();"); sb.Append("</script>"); return sb.ToString(); }
当我测试时,我的注销页面中没有javascript。任何人都对发生的事情有想法。 " Page_Load"注册太晚了吗?
解决方案
代替typeof(Page),请尝试typeof(YOURPAGECLASS)-使用YOURPAGECLASS设置页面的类名。 Page_Load绝对不会太晚。
顺便说一句:在一定时间后,我们不需要Java脚本即可将浏览器重定向到页面。只需在<HEAD>部分中使用纯HTML元标记。
<meta http-equiv="refresh" content="5; URL=login.aspx">
该数字表示以秒为单位的时间,即目标的URL。
也许执行管道中发生了不寻常的事情?
当我创建一个新的.aspx并粘贴我们在问题中提供的代码时,它可以按我们期望的方式工作(即,将Javascript呈现给客户端)。
我会这样注册:
Page.ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "script here", true);
最后一个" true"告诉ASP.NET呈现脚本标记和CDATA,因此我们不必全部将其编写出来。
我们可能还希望将javascript放在单独的包含文件中,以便在进行调整时不必重新编译。如果这样做,那么在页面加载中我们将拥有:
Page.ClientScript.RegisterClientScriptInclude("RedirectInclude", "scripts/redirect.js"); Page.ClientScript.RegisterStartupScript(this.GetType(), "Redirect", "JavascriptRedirect();", true);
我并没有说明为什么它不起作用,但是我可以给我们一个解决方法:
在页面中声明一个asp:literal项目。在pageLoad中,
yourLiteral.Text = JavascriptRedirecct();