У меня есть код, подобный следующему в 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 ... Но есть ли какой-то нюанс, который я упускаю?