Tengo curiosidad por ver si el enfoque de Samuel funciona. Si lo intenta, publique su resultado.
No estoy diciendo que Samuel esté equivocado, solo sería curioso.
La razón por la que tengo curiosidad es porque viewstate se serializa recursivamente (como mencionó Samuel) si tenía un control con viewstate habilitado que era un elemento secundario de un control con viewstate deshabilitado, entonces el control secundario no tendría viewstate porque la serialización recursiva saltaría por completo en el nivel principal. Esto sería específicamente problemático si ha construido sus propios controles de usuario que naturalmente contendrían muchos controles secundarios.
Otra solución sería utilizar el enfoque del método de utilidad de Samuel, pero en lugar de deshabilitar todo, simplemente deshabilítelo para controles como Label, Literal, etc. que no tienen hijos ... o si tienen hijos, está bien si los niños have viewstate deshabilitado.
Naturalmente, querrá evitar deshabilitar la vista del estado de los paneles y marcadores de posición por el motivo que indiqué anteriormente.
Editar:
Public Shared Sub DisableViewState(ByVal cntrl As Control)
If TypeOf cntrl Is Label Then
cntrl.EnableViewState = False
ElseIf TypeOf cntrl Is Literal Then
cntrl.EnableViewState = False
ElseIf TypeOf cntrl Is Button Then
cntrl.EnableViewState = False
Else
If cntrl.Controls IsNot Nothing Then
For Each subControl As Control In cntrl.Controls
DisableViewState(subControl)
Next
End If
End If
End Sub
¿El mismo concepto de trabajo en una Placeholder? Eso solucionaría el problema de generar etiquetas HTML excesivas. –
El marcador de posición solo es beneficioso en los contenidos de texto.Si tiene un control de calendario y no quiere tener ViewState, no quiere usar Placeholder y escribir el calendario HTML. –
Es ciertamente y una opción, pero al desactivar viewstate para el contenedor, se desactivaría viewstate para todos los controles secundarios, incluidos los lables. – Zuhaib