更新按钮上的计数器

本文关键字:计数器 按钮 更新 | 更新日期: 2023-09-27 18:25:19

当我运行下面的代码时,它不会多次更新变量_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();
    }
}

更新按钮上的计数器

这是ASP.NET中为什么需要状态管理的经典情况/场景。

asp.net是无状态的,因为它运行在http协议上,http协议本身不维护任何状态,所以每次按下按钮都会生成一个新的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();    
    }  
}