回发时ViewState为null

时间:2011-06-08 13:31:32

标签: asp.net postback datasource viewstate

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

一些代码:

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();
        }

知道如何解决这个问题吗?我做错了吗?

1 个答案:

答案 0 :(得分:3)

btnAddIngredient_Click正在添加&#34; IngredienstList &#34;不是&#34; IngredientsList &#34; (注意拼写)。

您可以使用常量来避免这种拼写错误:

private const string IngredientsListViewStateKey = "IngredientsList";

然后像这样引用它:

ViewState[IngredientsListViewStateKey] = _ingredientsList;