Button click event doesn't work properly

2019-01-29 02:47发布

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?

4条回答
ら.Afraid
2楼-- · 2019-01-29 03:19

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";   
 }     
 } 
查看更多
冷血范
3楼-- · 2019-01-29 03:22

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.

查看更多
Lonely孤独者°
4楼-- · 2019-01-29 03:32
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;
  }

}
查看更多
叛逆
5楼-- · 2019-01-29 03:41

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.

查看更多
登录 后发表回答