2011-06-09 73 views
1

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

一些代碼:

private const string VIEW_INGREDIENTS = "IngredientsList"; 
     private const string VIEW_LANGUAGE = "CurrentLanguage"; 
     private List<IngredientData> _ingredientsList; 

protected void Page_PreInit(object sender, EventArgs e) 
     { 
      if (Page.IsPostBack) 
      { 
       if (ViewState[VIEW_INGREDIENTS] != null) 
       { 
        _ingredientsList = (List<IngredientData>) ViewState[VIEW_INGREDIENTS]; 
       } 

      } 
      else 
      { 
       // prepare ingredient lists 
       _ingredientsList = new List<IngredientData>(); 
      } 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      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[VIEW_INGREDIENTS] = _ingredientsList; 
      lstIngredients.DataSource = _ingredientsList; 
      lstIngredients.DataBind(); 
     } 

回答

8

您在PreInit期間使用vewstate嗎?嘗試在PreLoad期間稍後檢查。

+0

這似乎解決了它!謝謝! – Fverswijver 2011-06-09 10:02:24

+0

+1真棒,不敢相信我忽略了:D – Andomar 2011-06-09 10:24:22

+0

哇,很高興知道 – Jim109 2015-11-16 18:44:14

4

檢查網頁中是否有EnableViewState="true"

<%@ Page Language="C#" EnableViewState="true" ... 

並驗證web.config的站點範圍設置:

<pages enableViewState="true" enableViewStateMac="true" ... /> 

現在ASP.NET有內置viewstate列表控件,所以我想知道爲什麼你要爲它編寫自定義代碼。默認的viewstate應該適合你想要完成的工作。