按钮点击事件不';工作不正常

本文关键字:工作 不正常 事件 按钮 | 更新日期: 2023-09-27 18:24:48

下面的代码处理按钮点击事件。当用户第一次单击时,它将标签设置为"第一次",而当用户第二次单击时则将标记设置为"第二次"。但它不能正常工作。当我第一次点击它时,它将标签设置为"第一次",这是正确的,但当我第二次点击时,什么都没有发生。

我的代码:

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--;
    }
    }

我该怎么修?

按钮点击事件不';工作不正常

实例字段(如counter)的值不会跨回发保存。您需要将counter存储在ViewStateSession或其他持久存储中,以更合适的为准。例如:

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

然后在btnCompTagUpdate_Click中引用this.Counter而不是counter

如果"Coutner"完全按照您列出的方式初始化,那么这就是您的问题。Coutner在每次回发后都会被重新初始化为零。你需要保存Coutner的状态——除了最简单的情况外,我通常建议不要使用它,但我认为你有一个使用ViewState的有效情况。

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

当第一次加载页面时,您可以立即设置计数器值。

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;
  }
}

您只需要更改方法中增加计数器的方式。单击按钮后,不会将其另存为新变量。

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";   
 }     
 }