RegisterStartupScript on Logout page

I am trying to have a logout page where is displays a messages and then redirects to the login page. This is in ASP.net 2.0.

У меня есть это в моем Page_Load:

ClientScript.RegisterStartupScript(typeof(Page), "pageredirect", JavascriptRedirect() );

This is my redirect function:

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 поздно зарегистрировать это?

5 ответов

Решение

Кстати: вам не нужен Javascript для перенаправления браузера на страницу через определенное время. Просто используйте простой метатег HTML в вашем <HEAD> раздел.

<meta http-equiv="refresh" content="5; URL=login.aspx">

Число обозначает время в секундах, URL для цели.

Я не понимаю, почему это не работает, но я могу дать вам обходной путь:

объявите элемент asp:literal на странице. в pageLoad,

yourLiteral.Text = JavascriptRedirecct ();

Вместо typeof(Page) попробуйте typeof(YOURPAGECLASS) - с помощью YOURPAGECLASS задайте имя класса вашей страницы. Page_Load определенно не слишком поздно.

Возможно, что-то необычное происходит в вашем конвейере исполнения?

Когда я создаю новый.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);
Другие вопросы по тегам