ASP.NET C#:按下按钮时的标签计数

ASP.NET C#: Label count on button press

这可能是一个愚蠢的愚蠢问题,但为什么这不会增加超过 2?

无论我点击多少次按钮,标签都卡在 2.

protected void nextBtn_Click(object sender, EventArgs e)
    {
            questions = 1;
            questions++;
            qstnLbl.Text = questions.ToString();
    }

标签应该从 1 开始,然后在按下按钮时添加一个数字,例如 2-3-4 等。我是不是遗漏了什么?

Web 是无状态的。 questions 在每次回发时都初始化为 1,因此值始终为 2;

请将代码更改为以下使用会话维护状态的代码:

protected void nextBtn_Click(object sender, EventArgs e)
{
    questions = 1;
    if (Session["questions"] != null)
       questions = (int)Session["questions"];
    questions++;
    Session["questions"] = questions;
    qstnLbl.Text = questions.ToString();
}

在 Web 中维护状态的方法有很多种。请仔细阅读此 link 以获取更多相关信息。

即使在控制台或桌面应用程序中,这也行不通,因为每次点击都会将您的值重新初始化为 1。

此外,正如其他答案所述,HTTP 是无状态的。

您递增值的方式是正确的,但它始终为 2,因为您是在单击按钮时声明并为问题变量 1 赋值。因此,当您单击按钮时,您会得到持有 1 的问题变量,该变量会增加到 2 并将显示在标签中。

因此,要解决问题,您必须使用能够永久保存您的问题变量的东西,除非您销毁它。因此,您可以使用 ViewState、Session 或 Cookie。

使用会话。

protected void nextBtn_Click(object sender, EventArgs e)
{
    int questions = Session["questions"] ==null? 1:
       Convert.ToInt32(Session["questions"]);        
    questions++;
    Session["questions"] = questions;
    qstnLbl.Text = questions.ToString();
}

同样,您可以使用 ViewState 或 Cookie 而不是会话。