Button click event doesn’t work properly

This following code handle button click event. When the user click first time it sets the lable as “First Time”, and when the user click second time it sets the lable as “Second Time”. But it doesn’t work properly. When I first click it, it sets the lable as “First time”, which is correct, but when I click second time, nothing happend.

My code:

int counter=0;    
protected void btnCompTagUpdate_Click(object sender, EventArgs e)
{

    if (counter == 0)
    {
        lable1.Text="First Time";
        counter++;
    }
    else if (counter == 1)
    {
        lable1.Text="Second Time";
        counter--;
    }

    }

How can I fix it?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

The values of instance fields like counter are not saved across postbacks. You need to store counter in ViewState, Session, or some other persistent store, whichever is more appropriate. For example:

private int Counter
{
    get { return ((int?)this.ViewState["Counter"]).GetValueOrDefault(); }
    set { this.ViewState["Counter"] = value; }
}

Then reference this.Counter instead of counter in btnCompTagUpdate_Click.

Method 2

If “Coutner” is initialized exactly in the way you are listing, then that’s your problem. Coutner gets re-initialized to zero after every postback. You need to save Coutner’s state — I normally recommend against it for any but the simplest cases, but I think you have a valid case for the use of ViewState.

Method 3

void Page_Load(object sender, EventArgs e)
 {
   if (!IsPostBack)
     Session["counter"]=0;
 }

You set the counter value at once, when first the page loads.

protected void btnCompTagUpdate_Click(object sender, EventArgs e)
{
 int counter=0;
if (Session["counter"]!=null)
 counter= Convert.ToInt32(Session["counter"]);
  if (counter == 0)
  {
    lable1.Text="First Time";
    counter++;
   Session["counter"]=counter;
  }
 else if (counter == 1)
  {
    lable1.Text="Second Time";
    counter--;
   Session["counter"]=counter;
  }

}

Method 4

You only need to change the way you increase the counter in the method. You are not saving it back as a new variable after the button click.

int counter = 0;     
protected void btnCompTagUpdate_Click(object sender, EventArgs e) {     
if (counter == 0)     { 
counter = counter + 1;        
label1.Text="First Time";             
}    
 else if (counter == 1) {         
counter = counter - 1;        
label1.Text="Second Time";   
 }     
 }


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x