【问题标题】:Increment number every time button is click每次单击按钮时递增数字
【发布时间】:2016-09-28 23:13:03
【问题描述】:

每当我单击一个按钮时,我都想增加一个int 变量i。但是我得到的只是int1 值,并且不再增加。

这是我的代码:

private int i;

protected void btnStart_Click(object sender, EventArgs e)
{
    i++;

    lblStart.Text = i.ToString();
}

【问题讨论】:

  • 你定义了你的变量 i 吗?有初始值吗?
  • Winforms ?还是来自网络?

标签: c# asp.net increment


【解决方案1】:

通过每个请求(单击按钮),将创建一个新实例。 所以你的非静态变量将被重置为0

您可以将i 定义为静态:

private static int i;
protected void btnStart_Click(object sender, EventArgs e)
{
    i++;

    lblStart.Text = i.ToString();
}

但请注意,i 变量在所有用户之间共享。 要改善此问题,您可以使用Session

Session 是一种在会话中存储每个用户的数据的能力。

因此您可以使用以下属性来更改每个会话中的i 变量:

private int i
{
    get
    {
        if (Session["i"] == null)
            return 0;

        return (int)Session["i"];

        // Instead of 3 lines in the above, you can use this one too as a short form.
        // return (int?) Session["i"] ?? 0;
    }
    set
    {
        Session["i"] = value;
    }
}

protected void btnStart_Click(object sender, EventArgs e)
{
    i++;

    lblStart.Text = i.ToString();
}

【讨论】:

  • 这不会影响page_load吗?
  • 我使用 Asp.net。稍后我将把标签保存在我的数据库中。我只是好奇它是否会对我的页面加载产生影响。
  • @rainalasa,不,您只在btnStart_Click 事件中使用了这个i 变量。
  • Static 将使该变量在网页的所有用户之间共享。我不确定这是您正在寻找的行为。
  • 静态变量在asp.net中有应用范围;因此,如果任何用户增加该值将反映所有其他人
【解决方案2】:

你知道其他答案是正确的,我想添加另一个答案

您必须在 webform 中将变量保存在 ViewState

像这样定义你的变量

public int i 
{
    get { Convert.ToInt32( ViewState["i"] ); }
    set { ViewState["i"] = value ; }
}

【讨论】:

    【解决方案3】:

    每次将 lblStart.Text 值转换为 int 并将其分配给 i。然后增加 i。

    private int i;
    protected void btnStart_Click(object sender, EventArgs e)
     {
        i =   Int32.Parse(lblStart.Text);
        i++; 
        lblStart.Text = i.ToString();
     }
    

    【讨论】:

      【解决方案4】:

      您可以使用隐藏字段,将它们初始化为 0。

      private int i;
      protected void btnStart_Click(object sender, EventArgs e)
       {
          i =   int.Parse(myHiddenField.Value);
          i++; 
          myHiddenField.Value = i;
          lblStart.Text = i.ToString();
       }
      

      【讨论】:

        【解决方案5】:
        protected static int a = 0;
            
        protected void btnStart_Click(object sender, EventArgs e)
        {
            a = a+1;
            lblStart.Text = i.ToString();
        }
        

        它对我有用,但在 page_load() 上它再次从 1 开始值!

        【讨论】:

          猜你喜欢
          • 2021-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          • 1970-01-01
          • 2022-08-08
          • 1970-01-01
          • 2017-03-08
          相关资源
          最近更新 更多