Почему ViewState теряется, когда свойство элемента управления изменяется во время его родительского метода Control.Render? - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть код, подобный следующему в UserControl:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    If someCondition Then
        childControl.Enabled = false
    End If

    MyBase.Render(writer)
End Sub

Всякий раз, когда someCondition имеет значение true, а childControl.Enabled устанавливается в значение false во время события Render, ViewState для childControl уничтожается (т.е. если это TextBox, введенный пользователем текст теряется).

Обратите внимание, что только ViewState потерян ... Элемент управления по-прежнему отображается с правильными значениями свойств в первый раз. Только в PostBack, когда свойства восстанавливаются из ViewState, значения фактически теряются.

Временная шкала выглядит следующим образом:

  • Page_Load (начальный)
    Свойства устанавливаются с помощью кода.
  • SaveViewState
  • Рендер
    Свойства изменены.
  • Произошла обратная передача.
  • LoadViewState
  • Page_Load
    Значения неизмененных элементов управления все еще доступны, но элементы управления, свойства которых были установлены во время метода Render, пустые.
  • SaveViewState

Насколько я понимаю, ViewState стал фиксированным во время вызова Control.SaveViewState, который происходит до вызова Control.Render ... Но есть ли какой-то нюанс, который я упускаю?

1 Ответ

2 голосов
/ 09 ноября 2009

Должны ли элементы управления, которые отключены, оставлять пустые значения? Или вообще ничего не публиковать? Если честно, я забыл. Но если они публикуют пустые значения, то ваше представление будет переопределено, как если бы вы ввели что-то новое в текстовое поле, а затем разместили страницу.

...