Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 页面范围变量消失_C#_Asp.net_.net - Fatal编程技术网

C# 页面范围变量消失

C# 页面范围变量消失,c#,asp.net,.net,C#,Asp.net,.net,假设我有以下asp.net页面: public partial class SamplePage : System.Web.UI.Page { private int UserID; protected void Page_Load(object sender, EventArgs e) { } protected void btnSearchUser_Click(object sender, EventArgs e) { Use

假设我有以下asp.net页面:

public partial class SamplePage : System.Web.UI.Page
{
    private int UserID;

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void btnSearchUser_Click(object sender, EventArgs e)
    {
       UserID = 5;
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Write(UserID.ToString());
    }
}

但是UserID总是0。如何使其始终为5?

因为按钮的点击会导致回发,并且由于HTTP协议是无状态的,因此回发过程中数据总是丢失。。因此,您必须将该用户标识存储到viewstate中以维护其值…这就是为什么我们在Asp.net中使用状态管理的概念。 然而,你可以做到这一点

public partial class SamplePage : System.Web.UI.Page
{
    int UserID;
  protected void Page_Load(object sender, EventArgs e)
  {

  }
 protected void btnSearchUser_Click(object sender, EventArgs e)
 {
    UserID=5;
    ViewState["UserID"] = UserID;
 }
 protected void btnSubmit_Click(object sender, EventArgs e)
 {
    if(ViewState["UserID"]!=null)
    Response.Write(ViewState["UserID"].ToString());
 }
}

要在回发之间持久化数据,需要将其置于当前控件的视图状态:

private int UserID
{
    get
    {
        return this.ViewState["UserID"] as int? ?? -1; // if data is missing, default value -1 will be returned
    }
    set
    {
        this.ViewState["UserID"] = value;
    }
}