Search code examples
c#asp.nettimerticker

Timer in ASP.Net (Language C#) stops after 1 tick


i wanted to use a timer in a program i'm working on, but it always stops after 1 tick !! can you give me any tips to make it repeat unstoppably (or until i want it to) please ??
this is my code:

    int i = 20;

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "(20)";
    }

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        i--;
        Label1.Text = "(" + i + ")";

        if (i == 0)
        {
            Session["Profession"] = "Visiteur";
            Response.Redirect("Acceuil.aspx");
        }

Edit: my HTML code :

<form id="form1" runat="server">
<div><center>
    <span class="style1">message</span><br 
        class="style1" />

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick" >
    </asp:Timer>

        <asp:Timer ID="Timer2" runat="server" Interval="1000">
    </asp:Timer>

        <br />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
    </asp:UpdatePanel>

    <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click" 
        PostBackUrl="~/Acceuil.aspx">Retour</asp:LinkButton>
    <br />
        </center>
</div>
</form>

Edit2: what i want to do is the normal redirecting code, count to 20 and refreshing every second (to show to user how much secs left) and at the end it redirects to a new page, but it wasn't working, so i was wondering why ?? and i think i got my answer from @Andrei Rînea, and thank you everyone for your help : )

Edit3: Solved and here is the code :

static int i = 20;
protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    Label1.Text = "20";
}
protected void Timer1_Tick(object sender, EventArgs e)
{

    i--;
    Label1.Text = i.ToString();

    if (i == 0)
    {
        i = 20;
        Session["Profession"] = "Visiteur";
        Response.Redirect("Acceuil.aspx");
    }
}

Thanks everyone again : )


Solution

  • Please use the following code :
    
    
    
        static int i = 20;
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!Page.IsPostBack)
            Label1.Text = "(20)";
        }
        protected void Timer1_Tick(object sender, EventArgs e)
        {
    
            i--;
            Label1.Text =i.ToString();
    
            if (i == 0)
            {
                Session["Profession"] = "Visiteur";
                Response.Redirect("Acceuil.aspx");
            }
        }
    
    
        your HTML code should be like :
    
        <form id="form1" runat="server">
            <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
    
                </asp:ScriptManager>
    
    
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                         <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    
    
    
                     <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="1000">
                       </asp:Timer>
                    </ContentTemplate>
    
                </asp:UpdatePanel>
    
            </div>
            </form>