每当我点击按钮时,我想增加int
变量i
。但我获得的只是int
的{{1}}值,并且它不会再增加。
这是我的代码:
1
答案 0 :(得分:3)
通过每个请求(单击按钮),将创建一个新实例。
因此,您的非静态变量将重置为0
。
您可以将i
定义为静态:
private static int i;
protected void btnStart_Click(object sender, EventArgs e)
{
i++;
lblStart.Text = i.ToString();
}
但请注意,i
变量在所有用户之间共享。
要改善此问题,您可以使用Session
。
Session
是一种在会话中存储每个用户数据的功能。
因此,您可以使用以下属性更改每个会话中的i
变量:
private int i
{
get
{
if (Session["i"] == null)
return 0;
return (int)Session["i"];
// Instead of 3 lines in the above, you can use this one too as a short form.
// return (int?) Session["i"] ?? 0;
}
set
{
Session["i"] = value;
}
}
protected void btnStart_Click(object sender, EventArgs e)
{
i++;
lblStart.Text = i.ToString();
}
答案 1 :(得分:2)
如您所知其他答案是正确的我想添加另一个答案
您必须在 webform 中将变量保存在ViewState
只需像这样定义你的变量
public int i
{
get { Convert.ToInt32( ViewState["i"] ); }
set { ViewState["i"] = value ; }
}
答案 2 :(得分:1)
每次将lblStart.Text值转换为int并将其分配给i。然后增加我。
private int i;
protected void btnStart_Click(object sender, EventArgs e)
{
i = Int32.Parse(lblStart.Text);
i++;
lblStart.Text = i.ToString();
}
答案 3 :(得分:0)
您可以使用隐藏字段,将其初始化为0。
private int i;
protected void btnStart_Click(object sender, EventArgs e)
{
i = int.Parse(myHiddenField.Value);
i++;
myHiddenField.Value = i;
lblStart.Text = i.ToString();
}