2012-07-26 48 views
0

假設我有以下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始終?

回答

2

由於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

0

要堅持回發之間的數據需要將其放置到當前控件的視圖狀態:

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