所以我的页面上有一个列表框和一些文本字段。通过文本字段,我可以将一个项目添加到我的列表框中(单击按钮,它将其添加到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();
}
知道如何解决这个问题吗?我做错了吗?
答案 0 :(得分:3)
btnAddIngredient_Click
正在添加&#34; IngredienstList &#34;不是&#34; IngredientsList &#34; (注意拼写)。
您可以使用常量来避免这种拼写错误:
private const string IngredientsListViewStateKey = "IngredientsList";
然后像这样引用它:
ViewState[IngredientsListViewStateKey] = _ingredientsList;