增量值不超过2

时间:2014-05-26 09:49:50

标签: c# asp.net

我试图在按钮点击事件中将整数值增加1,但是当我点击它时,它会第一次递增并保持不变,例如它不会增加到3。

public partial class Form : System.Web.UI.Page
{
    int num = 1;

    protected void Page_Load(object sender, EventArgs e)
    {

        Label_PageNumber.Text = "Page0" + num.ToString();

    }



    protected void Button1_Click(object sender, EventArgs e)
    {
        num++;

        Label_PageNumber.Text = "Page0" + num.ToString();

    }
}

4 个答案:

答案 0 :(得分:3)

全局变量在 PostBack 上初始化,之前的值丢失,如果您想要 PostBack 之间的值,可以使用ViewState

public partial class Form : System.Web.UI.Page
{       
    public int Num
    {
         get {
                if(ViewState["num"] != null)
                   return int.Parse(ViewState["num"]); 
                else
                   return 0;  
              }
         set { ViewState["num"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {    
        Label_PageNumber.Text = "Page0" + Num.ToString();    
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Num++;    
        Label_PageNumber.Text = "Page0" + Num.ToString();    
    }
}

全局变量的值丢失,因为Http是无状态协议。

  

stateless protocol (Http) 不需要HTTP服务器保留   有关每个用户的信息或状态,持续时间为多个   要求。但是,某些Web应用程序实现状态或服务器   使用例如HTTP cookie或隐藏变量的辅助会话   在网络表格中。

View state是ASP.NET页面中的存储库,可以存储在回发期间必须保留的值。页面框架使用视图状态在回发之间保持控制设置。

  • 您可以在自己的应用程序中使用视图状态来执行以下操作:

  • 在回发之间保留值,而不将其存储在会话状态或用户个人资料中。

  • 存储您定义的页面或控件属性的值。

答案 1 :(得分:0)

问题是,当您点击按钮时,会生成一个PostBack,然后您的计数器将设置为1.使用会话来存储您当前的值!

public partial class _Default : System.Web.UI.Page 
{
    int num;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            num = 1;
            Session["number"] = num;
            Label_PageNumber.Text = "Page0" + num.ToString();
        }
        else
        {
            num = (int)Session["number"];
        }      
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        num++;
        Session["number"] = num;
        Label_PageNumber.Text = "Page0" + num.ToString();
    }
}

答案 2 :(得分:0)

代码中的一个简单更改,将int变量设为静态:

public partial class Form : System.Web.UI.Page
{
 static int num = 1;

protected void Page_Load(object sender, EventArgs e)
{

    Label_PageNumber.Text = "Page0" + num.ToString();

}



protected void Button1_Click(object sender, EventArgs e)
{
    num++;

    Label_PageNumber.Text = "Page0" + num.ToString();

}

}

答案 3 :(得分:0)

ASP.Net是无国籍的;这意味着你无法存储像win form这样的字段。正如Adil所说,您可以使用视图状态来存储值。另一种选择是使用Session。使用Session代替ViewState有一些优势。

首先,您的页面会更亮,因为视图状态值嵌入在页面中。

其次,Session更安全,因为它保留在服务器中,但视图状态值会发送到客户端。

第三,当你转到另一个页面时,你将丢失视图状态值。实际上,您将在新页面中显示上一页的字段(在某些情况下可能会有缺点)。

您应该知道Microsoft在没有ViewSate的情况下引入了ASP.NET MVC。