我已经完成了一些C ++编程,但我是c#的新手。
我写了一个简单的应用来计算用户点击按钮的次数,然后在按钮上显示该次数。
在第一次点击它可以工作,但之后它保持在1.任何建议?提前致谢
public partial class Default : System.Web.UI.Page
{
private int clickcount = 0;
public virtual void button1Clicked (object sender, EventArgs args)
{
clickcount++;
button1.Text = "You clicked me "+clickcount.ToString()+" time";
}
public virtual void GreetButtonClicked (object sender, EventArgs args)
{
GreetButton.Text = "Hello "+TextInput.Text;
}
}
答案 0 :(得分:4)
每次创建页面时,您都将计数设置为零。这样:
private int clickcount = 0;
几乎与此相同:
private int clickcount;
public Default()
{
clickcount = 0;
}
由于每次请求页面时都会调用构造函数,因此您将始终将值重置为零。
你如何解决这个问题取决于你想要计算什么。例如,如果要计算当前会话中的点击次数,则应使用会话变量来存储计数。
我建议您阅读以下网页,以便更好地了解状态的存储位置以及最适合不同用途的存储类型:
答案 1 :(得分:2)
网页不会自动保留数据,因此clickcount
的值仅保留在内存中,直到服务器完成页面渲染。下次单击该按钮时,计数器将重置为0.如果要在回发(页面加载)之间保留数据,则必须将数据存储在某处,例如Session
,{{1}或在数据库中。
以下是一个示例,根据您的代码修改:
ViewState
答案 2 :(得分:1)
clickcount将设置为0,因为它在每次回发时都会初始化为您设置的值(在本例中为> 0)。如果你将它设为私有静态int,你会看到值实际上会增加。
int counter = 0; <-- gets initialized to 0 on each click
static int counter1 = 0; <--- gets incremented on each click, so 1,2,3 ...
正如在这个答案的评论中指出的那样: 如果您计划实际使用计数器,最好使用Session变量来存储单击按钮的次数。
答案 3 :(得分:1)
如果您不关心会话和其他类型的持久性,可以使用VIEWSTATE将此值保留在属性中。
像这样使用你的代码,这将有效:
public partial class Default : System.Web.UI.Page
{
public int clickcount
{
get
{
if(Viewstate["clickcount"] != null)
{
return (int)Viewstate["clickcount"]; //Need to cast the viewstate object in int.
}
else
{
return 0;
}
}
set
{
Viewstate.add("clickcount",value);
}
}
public virtual void button1Clicked (object sender, EventArgs args)
{
clickcount++;
button1.Text = "You clicked me "+clickcount.ToString()+" time";
}
public virtual void GreetButtonClicked (object sender, EventArgs args)
{
GreetButton.Text = "Hello "+TextInput.Text;
}
}
答案 4 :(得分:0)
您应该将clickcount
声明为静态变量。
答案 5 :(得分:0)
我认为有一种简单的方法可以解决这个问题
您可以添加新标签并使visible = false
然后代码就像
counter = int.parse(label.text);
counter++;
label.text = counter.ToString();
button.text = "you clicked me "+counter.ToString();