简体   繁体   中英

How to redirect to another page after a delay

I have a sign-in box in my webpage which is inside an UpdatePanel

<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="upSign" UpdateMode="Conditional">
    <ContentTemplate>
        <div class="dvHolder hidOverflow clearfix">
            <input id="txtSUser" type="text" name="SUsername" value="" placeholder="Username" runat="server" />
        </div>
        <div class="dvHolder hidOverflow clearfix">
            <input id="txtSPass" type="password" name="SPassword" value="" placeholder="Password" runat="server" />
        </div>
        <div class="dvHolder hidOverflow clearfix setTextRight">
            <asp:Button ID="btnSignIn" ClientIDMode="Static" runat="server" Text="Sign In" OnClick="btnSignIn_Click" />
            <asp:Label runat="server" Text="" ID="lblSSuccess" ClientIDMode="Static" CssClass="lblMsgSuccess" />
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

Once the user is validated successfully, I want to show a message and redirect after a delay (let's say 5 seconds). I have the following code but it is not redirecting:

public void btnSignIn_Click(object sender, EventArgs e)
{
    lblSSuccess.Text = "We found you, now redirecting...";
    lblSSuccess.ForeColor = ColorTranslator.FromHtml("#037203");
    Session["UseIsAuthenticated"] = "true";

    Response.AppendHeader("Refresh", "5;url=homepage.aspx");
}

The message is updated but the page is not redirecting for some reason.

Please help me resolve the issue.

You can write a block of Javascript with a delay and redirect to the page with this code

public void btnSignIn_Click(object sender, EventArgs e)
{
    lblSSuccess.Text = "We found you, now redirecting...";
    lblSSuccess.ForeColor = ColorTranslator.FromHtml("#037203");
    Session["UseIsAuthenticated"] = "true";

    ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "redirectJS",
    "setTimeout(function() { window.location.replace('homepage.aspx') }, 5000);", true);
}

first create a function that makes the action you need (redirect to page for example)

Second add timer to your markup and set the time interval to 5000 ( 5 sec) and mark the timer as enabled=false so the timer wont start after the page loading

once the user is validated successfully, show the message you want then enable the timer

There are many ways to do this but I love to use this code because it works well when used in many different circumstances. This is with a 5 second delay.

HtmlMeta oScript = new HtmlMeta();
oScript.Attributes.Add("http-equiv", "REFRESH");
oScript.Attributes.Add("content", "5; url='http://www.myurl.com/'");
Page.Header.Controls.Add(oScript);

Response.AppendHeader("刷新", "2;url=page.aspx");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM