2014-05-09 171 views
1

問題是,每次我做一個回發我的變量「值」不保留它的以前的值,並且總是字典是空的。它沒有任何以前保存的數據。我怎樣才能保存數據?全局變量不保留其值

這是代碼:

public partial class MyCart : System.Web.UI.Page 
     { 
      public Dictionary<string, string> value = new Dictionary<string, string>(); 
      protected void Page_Load(object sender, EventArgs e) 
      { 
        TextBox textbox = new TextBox();     
        textbox.TextChanged += textbox_TextChanged; 
        textbox.ID = "textbox" + p.IDProduct.ToString(); 
        Button button = new Button(); 
      } 

      void textbox_TextChanged(object sender, EventArgs e) 
      { 
        value.Add(((TextBox)sender).ID, ((TextBox)sender).Text); 
      } 
} 

回答

3

global變量是在回發重新創建你可能需要把變量ViewState用於保持回發之間的數據。

如果數據很小,可以使用ViewState,但如果數據很大,那麼您可能需要考慮替代介質存儲可能是數據庫。

要用ViewState來做,你需要類似的東西。

public Dictionary<string, string> value = new Dictionary<string, string>(); 
protected void Page_Load(object sender, EventArgs e) 
{ 

    if(ViewState["valDic"] != null) 
     value = (Dictionary<string, string>)ViewState["valDic"]; 
    TextBox textbox = new TextBox();     
    textbox.TextChanged += textbox_TextChanged; 
    textbox.ID = "textbox" + p.IDProduct.ToString(); 
    Button button = new Button(); 
} 

void textbox_TextChanged(object sender, EventArgs e) 
{ 
    value.Add(((TextBox)sender).ID, ((TextBox)sender).Text); 
    ViewState["valDic"] = value; 
} 

視圖狀態是ASP.NET頁面框架用來 保留往返之間的頁面和控件值的方法。當呈現頁面的HTML 標記時,在回發過程中必須保留的頁面當前狀態和 值將被序列化爲 base64編碼的字符串。然後將這些信息放入查看 狀態的隱藏字段或字段MSDN

+0

好的,我明白了。謝謝 ! –

+0

歡迎您 – Adil

+1

感謝Adil Bhai ..它幫助了我很多 – kashif

1

後回傳變量失去價值,因爲它們是recreated..You可以依靠HTML隱藏輸入..

標記:

<input id="Hidden1" type="hidden" runat="server" value=""/> 

後面的代碼:

Hidden1.value="something"; 
+0

謝謝。這是一個很好的竅門。 –

+0

不客氣,朋友.. – Jameem