变量值不会增加

时间:2014-02-07 05:26:18

标签: c# asp.net lambda postback

这是我的代码:

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

3 个答案:

答案 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()); 

    };
}