以下代码处理按钮单击事件。当用户第一次点击时,它将标签设置为“第一次”,当用户第二次点击时,它将标签设置为“第二次”。但它不能正常工作。当我第一次点击它时,它将标签设置为“第一次”,这是正确的,但是当我第二次点击时,没有任何事情发生。
我的代码:
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--;
}
}
我该如何解决?
答案 0 :(得分:8)
{@ 1}}等实例字段的值不会在回发中保存。您需要将counter
存储在counter
,ViewState
或其他一些持久存储中,以更合适的方式存储。例如:
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";
}
}