页面范围变量Dissapear

问题描述:

假设我有以下asp.net页面:页面范围变量Dissapear

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()); 
    } 
} 

但用户ID始终为0。如何实现它是5始终?

由于Button的点击会导致回发,并且在回发期间数据总是丢失,因为HTTP协议是无状态的。因此,您必须将该用户ID存储到视图状态以保持其值...因此,我们拥有State Mangement在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()); 
} 
} 
+0

不要查找ViewState中,曾多次(两次在你的代码中)。 – abatishchev 2012-07-26 09:16:17

+1

为什么?背后的原因......? – 2012-07-26 09:18:07

要坚持回发之间的数据需要将其放置到当前控件的视图状态:

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; 
    } 
}