按钮点击事件不';工作不正常
本文关键字:工作 不正常 事件 按钮 | 更新日期: 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
存储在ViewState
、Session
或其他持久存储中,以更合适的为准。例如:
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";
}
}