按钮单击事件无法正常工作

时间:2012-02-14 16:16:24

标签: c# asp.net visual-studio events

以下代码处理按钮单击事件。当用户第一次点击时,它将标签设置为“第一次”,当用户第二次点击时,它将标签设置为“第二次”。但它不能正常工作。当我第一次点击它时,它将标签设置为“第一次”,这是正确的,但是当我第二次点击时,没有任何事情发生。

我的代码:

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

    }

我该如何解决?

4 个答案:

答案 0 :(得分:8)

{@ 1}}等实例字段的值不会在回发中保存。您需要将counter存储在counterViewState或其他一些持久存储中,以更合适的方式存储。例如:

Session

然后在private int Counter { get { return ((int?)this.ViewState["Counter"]).GetValueOrDefault(); } set { this.ViewState["Counter"] = value; } } 中引用this.Counter而不是counter

答案 1 :(得分:6)

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

答案 2 :(得分:1)

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

}

答案 3 :(得分:-4)

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

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