2011-06-08 56 views
0

所以我有一個列表框在我的頁面和一些文本框。通過文本框我可以添加一個項目到我的列表框中(點擊按鈕,它將它添加到private List<string>然後設置爲ViewState並且列表再次被數據綁定)。 我的列表框也存在於按鈕的Click事件觸發的updatepanel中。 問題:我的Viewstate在回發中保持爲空,因此每次都會重置。ViewState null on postback

一些代碼:

private List<IngredientData> _ingredientsList; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      // prepare ingredient lists 
      _ingredientsList = new List<IngredientData>(); 

      if (Page.IsPostBack) 
      { 
       if (ViewState["IngredientsList"] != null) 
       { 
        _ingredientsList = (List<IngredientData>) ViewState["IngredientsList"]; 
       } 
      } 

      lstIngredients.DataSource = _ingredientsList; 
      lstIngredients.DataTextField = "Text"; 
      lstIngredients.DataValueField = "Name"; 
      lstIngredients.DataBind(); 
     } 

     protected void btnAddIngredient_Click(object sender, EventArgs e) 
     { 
      _ingredientsList.Add(new IngredientData { Name = txtIngredientName.Text, Quantity = txtUnitQuantity.Text, Unit = lstUnits.SelectedValue }); 

      ViewState["IngredienstList"] = _ingredientsList; 
      lstIngredients.DataSource = _ingredientsList; 
      lstIngredients.DataBind(); 
     } 

任何想法如何,我可以解決這個問題?難道我做錯了什麼?

回答

3

btnAddIngredient_Click也加入到 「IngredienstList」 而不是 「IngredientsList」(注意拼寫)。

您可以通過使用一個恆定避免這種錯字:

private const string IngredientsListViewStateKey = "IngredientsList"; 

則指的是這樣的:

ViewState[IngredientsListViewStateKey] = _ingredientsList; 
+1

上帝我覺得很可怕......我和我的同事一直看着這個年齡,並沒有錯過這個... 現在完美的作品,謝謝! – Fverswijver 2011-06-08 13:35:49

+3

@Fverswijver:常量是你的朋友:) – Town 2011-06-08 13:36:50

+0

+1你抓住了一個優秀點。大 – 2011-06-08 13:37:43