注销页面上的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();