2010-10-21 24 views
0

這就是我的代碼的樣子。類變量損失值

我想知道爲什麼標籤中的值爲空或爲空。

我想在獲取數據時將值賦給用戶名,並在按鈕單擊事件中使用它。

some1可以指導我這個?它爲什麼發生,如何解決這個問題

我不想使用會話和靜態。

namespace GUI 
{ 
    public partial class Updatechild : System.Web.UI.Page 
{ 
    string UserName; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //CALL A FUNCTION TO GET THE VALUE 
      GetData(); 
     } 
    } 

    protected void GetData() 
    { 
     //VALUE assigned 
     UserName= "USER1" 
    } 

    // button click event 
    protected void Button_Click(object sender, EventArgs e) 
    { 
     Label.Text = UserName; //value comes as blank. 
    } 

} 

回答

3

要回答爲什麼會這樣的問題:基本上服務器處理來自瀏覽器對於頁面的請求每次,ASP.NET框架創建您的UpdateChild類的新實例。

在您的場景中,會發生2個不同的請求:一個是頁面首次加載時,另一個是用戶單擊按鈕時。

在第一次請求期間,由於請求不是回發,因此您的UpdateChild類將爲UserName變量分配一個值。但是,由於UpdateChild的實例將在請求完成處理後被丟棄,因此分配給該變量的值將丟失。如果你想保留這個值,那麼你需要將它存儲在你的頁面上的一個類級變量以外的地方。最合乎邏輯的地方可能在ViewState或Session中。

一個簡單的解決問題的方法是的UserName聲明更改爲類似如下:

string UserName 
    { 
     get { return ViewState["UserName"] as string; } 
     set { ViewState["UserName"] = value; } 
    } 
2

您應該從Button_Click方法調用GetData,同時GetData(string node)需要一個字符串。您只是這樣稱呼GetData()

3

Button_Click事件發生在PostBackGetData未被調用。

2

當你回發時,整個頁面被重新創建,並且由於你的UserName變量也被重新創建,它的默認值是null。所以你需要在ViewState中設置它的值之後把這個變量放進去。

2

如果Page_Load事件中的Condition是您的問題。當第一次加載頁面時,會觸發此事件,並使用GetData()中的值分配UserName字符串。但是這個值必須使用viewstate或session或static變量來持久化。當用戶點擊按鈕時,page_load事件被觸發,但由於If條件,你正在檢查!IsPostBack,GetData()函數不會將值賦給UserName變量。所以你的標籤永遠不會獲得用戶名值。

HTH