这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
int count = 0;
Add.Click += (source, e1) =>
{
count ++;
Response.Write(count);
};
}
}
当我点击按钮时,我想增加count
的计数器,从0到我点击按钮的次数。添加是静态按钮的名称。但是,如果我将我的代码放在if(!Page.IsPostBack)
之外,它只能打印1。但是当我输入!Page.IsPostBack
时,它会打印0
答案 0 :(得分:2)
count
是一个局部变量,每次在Page Load上重新初始化。
还有许多其他方法可以像Session Variable一样。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Add.Click += (source, e1) =>
{
if(Session["count"]==null)
Session["count"]=1;
else
Session["count"] = Convert.ToInt32(Session["count"]) + 1
Response.Write(Session["count"].ToString());
};
}
}
也可以使用其他状态管理技术,如 ViewSate 来实现此功能。 Session和Viewstate变量之间的区别在于,一旦移动到另一个页面, Viewstate 值就会被销毁
答案 1 :(得分:0)
是的,它应该表现得那样。
您的count
变量在闭包中捕获,通过单个请求离开。初始值为0
,如果由click
引起回发,则会更改一次。
答案 2 :(得分:0)
当您尝试使用asp添加动态时,您需要在每个请求上执行此操作,因为在每个请求上重建树控件并再次创建所有控件。
因此,要解决此问题,您需要在每个请求中添加Click
事件,即删除检查!Page.IsPostBack
同样如@mhasan所述,您需要在请求之间使用会话或其他东西来存储商店值,因为如果删除IsPostBack
,您将在每次请求时创建带闭包的lambda
更新:示例
protected void Page_Load(object sender, EventArgs e)
{
Add.Click += (source, e1) =>
{
Session["count"] = Convert.ToInt32(Session["count"]??0) + 1;
Response.Write(Session["count"].ToString());
};
}