按下按钮更新计数器

时间:2014-10-02 18:55:29

标签: c# asp.net

当我运行下面的代码时,它不会多次更新变量_counter。打印值总是" 1"无论我按下按钮多少次。如何在每次按下btnOK时更新它?

public partial class test2 : System.Web.UI.Page
{
    protected int _counter;
    public test2()
    {
        _counter = 0;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["cnt"] = 0;
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        _counter = (int)Session["cnt"];
        _counter++;
        Session["cnt"] = _counter;
        lblInfo.Text = _counter.ToString();
    }
}

1 个答案:

答案 0 :(得分:3)

这是ASP.NET中需要进行州管理的经典情况/场景。

是无状态的,因为它运行在协议上,该协议本身并不维护任何状态,因此每次按下按钮都会生成新的http-post请求 - >您的_counter初始化为0 - >增加到1并相应地显示。

考虑使用任何状态管理机制来解决此问题。您可以使用Session来避免这种情况,如

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
        Session["cnt"] = 0;
    else
        DoIncrement();
}

protected void DoIncrement()
{
    if(Session["cnt"] != null)
    {
        int _counter = (int)Session["cnt"];
        _counter++;
        Session["cnt"] = _counter;
        lblInfo.Text = _counter.ToString();    
    }  
}