Viewstate null при обратной передаче - PullRequest
1 голос
/ 09 июня 2011

Итак, у меня есть список на моей странице и несколько текстовых полей.Через текстовые поля я могу добавить элемент в свой список (нажмите кнопку, он добавит его в личный список, который затем устанавливается как ViewState, и список снова привязывается к данным).Мой список также находится в панели обновления, которая срабатывает при нажатии кнопки.Проблема: My 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();
        }

Ответы [ 2 ]

8 голосов
/ 09 июня 2011

Вы используете vewstate во время PreInit? Попробуйте проверить это чуть позже во время PreLoad.

4 голосов
/ 09 июня 2011

Проверьте, есть ли на странице EnableViewState="true":

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

И проверьте настройку для всего сайта в web.config:

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

Теперь ASP.NET имеет встроеннуюviewstate для элементов управления списком, поэтому мне интересно, почему вы пишете собственный код для него.Состояние представления по умолчанию должно хорошо работать для того, чего вы пытаетесь достичь.

...