【问题标题】:ASP.NET C#: Label count on button pressASP.NET C#:按钮按下时的标签计数
【发布时间】:2017-05-16 10:54:25
【问题描述】:

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

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

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

标签应该从 1 开始,并在按下按钮时添加一个数字,如 2-3-4 等。我错过了什么吗?

【问题讨论】:

    标签: c# asp.net int label buttonclick


    【解决方案1】:

    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 获取更多信息。

    【讨论】:

    • 当然,会话又回到了困扰我的地方,我还在学习这个 ASP.NET,会话现在是一个巨大的痛苦。效果很好,非常感谢!
    • 是的,在 ASP.NET 中维护状态是一项挑战。正如我在答案中所说,您还可以尝试链接中提到的其他方式来维护状态。也请接受答案,以便其他人清楚。
    【解决方案2】:

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

    如其他答案所述,HTTP 也是无状态的。

    【讨论】:

      【解决方案3】:

      您增加值的方式是正确的,但它始终为 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 代替 session。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 2017-12-28
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多