I have code like the following in a 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
Whenever someCondition is true and childControl.Enabled is set to false during the Render event, the ViewState for childControl is destroyed (i.e. if it is a TextBox, the text that the user has entered is lost).
Note that only the ViewState is lost... The control still renders with the correct property values the first time around. Only on PostBack, when properties are restored from ViewState are the values actually lost.
The timeline is as follows:
- Page_Load (initial)
Properties are set via code. - SaveViewState
- Render
Properties are modified. - Postback occurs.
- LoadViewState
- Page_Load
Values of unaltered controls are still available, but controls which have had properties set during the Render method are blank. - SaveViewState
My understanding was that the ViewState became fixed during the call to Control.SaveViewState, which occurs prior to the call to Control.Render... But is there some nuance that I'm missing?