asp.net - net - view state salesforce
Minimizar viewstate-confundido por `EnableViewState` y` ViewStateMode` en asp.net 4.0 (1)
Estoy tratando de limpiar un sitio antiguo de formularios web de ASP.NET que tiene ViewState habilitado en todas partes. Este es un problema de rendimiento: los grandes estados de vista causan demoras notables en el envío. Pero la mayoría de los formularios no parecen necesitar ViewState a excepción de algunos datos complejos de control y formulario. Sin embargo, incluso los formularios sin controles de entrada generan grandes visualizaciones porque supongo que asp.net está almacenando todo tipo de metatatos sobre cada control de servidor único. Pero el estado de visibilidad, etc., está todo controlado en el código, así que creo que puedo eliminar mucho.
Es bastante oneroso agregar EnableViewState="false"
a cada control único (en una página y creado en código) que no lo necesita, por lo que estoy tratando de deshabilitarlo en una página / nivel de control, y habilitarlo selectivamente para Cosas que lo necesitan. (Sí, me doy cuenta de que esto es riesgoso, pero en realidad solo hay un par de formularios grandes y un par de plantillas que, si se abordan, supondrían una gran diferencia).
Esto es lo que no estoy recibiendo del todo.
Si un control o una página tiene EnableViewState="false"
, su <%.. %>
descriptor, o en su etiqueta donde se crea en la página principal, todo se rompe, porque cualquier dato de ViewState agregado en el código no funciona. Así que parece que puedo dejarlo habilitado en el nivel de control, pero establezco EnableViewState
en falso para un control de envoltorio en cada contenedor, y luego establezco ViewStateMode=true
(que supera eso) a un nivel por control.
Lo que no entiendo es lo que sucede cuando:
ViewStateMode = ViewStateMode.Enabled
y EnableViewState = false
para un control que contiene otros controles.
para un control. ¿Se pueden habilitar los controles internos aún con ViewStateMode
? Básicamente, ¿qué configuración tiene la última palabra cuando entran en conflicto?
Para cada contenedor, quiero poder deshabilitar todo en un control de envoltura, pero aún así me aseguro de que:
1) Configuración de ViewState en el trabajo de código , y
2) ViewState está deshabilitado para todos los controles de forma predeterminada , y
3) Puedo habilitar selectivamente ViewState para subcontroles.
Esto parece estar confundiendo. Si tengo un control de envoltorio en la página maestra que se establece en EnableViewState="false"
, pero luego configura un subcontrol en ViewStateMode="Enabled"
, se interrumpe. Según MS, ViewStateMode debería reemplazar cualquier configuración externa de ViewState, pero parece que no funciona.
Según el artículo de MSDN en ViewStateMode , ViewStateMode
solo tiene significado cuando EnableViewState="true"
. Para lograr lo que desea, deberá dejar ViewStateMode="Enabled"
en el control, y luego ajustar los sub-controles del principal en un asp:Placeholder
que tiene ViewStateMode="Disabled"
. De esa manera, aún puede manipular ViewState en el código de código, pero ningún control secundario tendrá ViewState (excepto los que se configuró explícitamente para tenerlo a través de ViewStateMode="Enabled"
).