回发时查看状态为null

Fve*_*ver 1 asp.net viewstate postback listbox

所以我的页面上有一个列表框和一些文本字段.通过文本字段,我可以将一个项目添加到我的列表框中(单击按钮,它将其添加到一个私有列表,然后将其设置为ViewState,并再次对数据列进行数据绑定).我的列表框也位于更新面板中,该按钮的Click事件会触发该面板.问题:我的Viewstate在回发时保持为null,因此每次都会重置.

一些代码:

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();
        }
Run Code Online (Sandbox Code Playgroud)

Dan*_*Nsk 9

你在PreInit期间使用的是vewstate吗?在PreLoad期间尝试稍后检查一下.