Timer Tick not increasing values on time interval

Viewed 669

I want to increase values on timer tick event but it is not increasing don't know what I am forgetting it is showing only 1.

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

private int i = 0;

protected void Timer1_Tick(object sender, EventArgs e)
{
    i++;

    Label3.Text = i.ToString();
}
3 Answers

You can use ViewState to store and then read the value of i again.

int i = 0;

protected void Timer1_Tick(object sender, EventArgs e)
{
    //check if the viewstate with the value exists
    if (ViewState["timerValue"] != null)
    {
        //cast the viewstate back to an int
        i = (int)ViewState["timerValue"];
    }

    i++;

    Label3.Text = i.ToString();

    //store the value in the viewstate
    ViewState["timerValue"] = i;
}

Check whether the form is posted back and then assign values. Check IsPostBack

private int i;

protected void Timer1_Tick(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        i = 0;
    }
    else
    {
        i = Int32.Parse(Label3.Text);
        i++;           
    }

    Label3.Text = i.ToString();
}

Generally speaking it is not a good practice to store values inside of views (such as asp.net page). It could be overwritten each time the request is sent.

You could store your data elsewhere:

public static class StaticDataStorage
{
    public static int Counter = 0;
}

And use it:

protected void Timer1_Tick(object sender, EventArgs e)
{
    StaticDataStorage.Counter++;
    Label3.Text = StaticDataStorage.Counter.ToString();
}
Related