增量值不超过2

本文关键字:不超过 | 更新日期: 2023-09-27 18:05:03

我试图在一个按钮单击事件上增加一个整数值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();
    }
}

增量值不超过2

全局变量在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是无状态协议。

一个无状态协议(Http)不需要Http服务器保留每个用户的信息或状态,持续时间为多个请求。然而,一些web应用程序实现状态或服务器使用HTTP cookie或隐藏变量的会话在web表单中。

viewstate 是ASP中的存储库。. NET页,该页可以存储回发期间必须保留的值。页面框架使用viewstate在回发之间持久化控件设置。

  • 你可以在自己的应用程序中使用viewstate来做以下事情:

  • 在回发之间保留值,而不将其存储在会话状态或用户配置文件中。

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

问题是,当您单击Button时,将生成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();
    }
}

在你的代码中做一个简单的改变,使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();
}

}

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

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

第二,Session更安全,因为它保留在服务器中,然而,视图状态值被发送到客户端。

第三,当您转到另一个页面时,您将丢失视图状态值。事实上,您将在新页面中使用前页的字段(在某些情况下这可能是一个缺点)。

你应该知道微软引进了ASP。. NET MVC没有ViewSate