当我运行下面的代码时,它不会多次更新变量_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();
}
}
答案 0 :(得分:3)
这是ASP.NET
中需要进行州管理的经典情况/场景。
asp.net是无状态的,因为它运行在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();
}
}