Пользовательский серверный элемент управления ASP.NET не сохраняется ViewState - PullRequest
2 голосов
/ 21 декабря 2009

Я создал пользовательский серверный элемент управления, который обрабатывает некоторые данные, сохраняет эти данные в ViewState, а затем выводит себя из этих данных. Я использую отладчик и физически вижу, что данные получают значение ViewState:

public string RawData
    {
        get
        {
            string result = null;

            if (ViewState["RawData"] != null)
            {
                result = ViewState["RawData"].ToString();
            }

            return result;                
        }
        set
        {
            ViewState["RawData"] = value;
        }
    }

Однако после обратной передачи значение ViewState не сохраняется и становится нулевым. Почему это происходит? Где я могу посмотреть, чтобы попытаться устранить неполадки? Я могу сказать, что длина скрытого поля ViewState увеличилась после использования этого подхода.

Заранее спасибо!

EDIT: Вот мой метод Render, чтобы увидеть, где я устанавливаю ViewState:

    protected override void Render(HtmlTextWriter writer)
    {
        if (this.RawData == null)
        {
            StringBuilder content = new StringBuilder();

            content.Append(this.BuildHeader());
            content.Append(this.BuildLevelsMarkup());
            content.Append(this.BuildFooter());

            this.RawData = content.ToString();
        }

        writer.Write(this.RawData);
    }

1 Ответ

8 голосов
/ 21 декабря 2009

Один из возможных источников ошибки - установка значений Viewstate во время события OnInit. ViewState сохраняется только после вызова «TrackViewState». http://msdn.microsoft.com/en-us/library/ms972976.aspx

Может быть, вы "рано". Или «слишком поздно», если вы установили свои данные во время рендеринга.

РЕДАКТИРОВАТЬ: Вы меняете свою ценность во время "Render" - это слишком поздно! Во время рендеринга ViewState уже записан в поток HTML. Попробуйте переместить свой код в OnPreRender ()

...