Asp.net 回发时的Viewstate为空

Asp.net 回发时的Viewstate为空,asp.net,listbox,postback,viewstate,Asp.net,Listbox,Postback,Viewstate,所以我的页面上有一个列表框和一些文本字段。通过文本字段,我可以将一个项目添加到我的列表框中(单击按钮,它将其添加到一个私有列表中,然后该列表被设置为ViewState,并且该列表将再次数据绑定)。我的列表框也在一个updatepanel中,它在按钮的单击事件中被触发。问题:我的Viewstate在回发时保持为空,因此每次都会重置 一些代码: private const string VIEW_INGREDIENTS = "IngredientsList"; private con

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

一些代码:

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();
        }
private const字符串视图;
private const string VIEW_LANGUAGE=“CurrentLanguage”;
私有列表_ingredientsList;
受保护的无效页\u PreInit(对象发送方,事件参数e)
{
如果(第IsPostBack页)
{
if(ViewState[查看配料]!=null)
{
_IngCreditsList=(列表)视图状态[VIEW_Components];
}
}
其他的
{
//准备配料表
_ingredientsList=新列表();
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
lstComponents.DataSource=_ingredientsList;
lstComponents.DataTextField=“Text”;
lstComponents.DataValueField=“Name”;
lst.DataBind();
}
受保护的无效btnAddIngredient\u单击(对象发送方,事件参数e)
{
_添加(新的IngredientData{Name=txtIngredientName.Text,Quantity=txtnitQuantity.Text,Unit=lstUnits.SelectedValue});
ViewState[查看配料]=\u InCreditsList;
lstComponents.DataSource=_ingredientsList;
lst.DataBind();
}

检查页面是否启用了
EnableViewState=“true”


现在ASP.NET已经为列表控件内置了viewstate,所以我想知道为什么要为它编写自定义代码。默认的viewstate对于您要完成的任务应该很有效。

检查页面是否启用了
EnableViewState=“true”


现在ASP.NET已经为列表控件内置了viewstate,所以我想知道为什么要为它编写自定义代码。默认的viewstate应该可以很好地完成您要完成的任务。

您在PreInit期间使用的是vewstate吗?请稍后在预加载期间尝试检查此问题。

您在预初始化期间使用的是vewstate吗?请稍后在预加载过程中检查此问题。

这似乎可以解决此问题!谢谢这似乎解决了它!谢谢
<%@ Page Language="C#" EnableViewState="true" ...
<pages enableViewState="true" enableViewStateMac="true" ... />