2011-03-30 16 views
17

que estoy tratando de limpiar un sitio ASP.NET Web Forms antiguo que tiene ViewState habilitada en todas partes. Este es un problema de rendimiento: los enormes viewstates causan retrasos de envío notables. Pero la mayoría de los formularios realmente no parecen necesitar ViewState, excepto algunos datos de formulario complejos de control &. Sin embargo, incluso los formularios sin controles de entrada generan grandes estados de visualización porque supongo que asp.net almacena todos los tipos de metadatos sobre cada uno de los controles de servidor. Pero el estado de visibilidad, etc., está controlado por código, así que creo que puedo eliminar mucho.viewstate- confundidos por `` EnableViewState` y ViewStateMode` en asp.net 4.0

Es bastante oneroso agregar EnableViewState="false" a cada control (en una página y creado en código) que no lo necesita, por lo que estoy tratando de deshabilitarlo en un nivel de página/control, y activarlo selectivamente para cosas que lo necesitan (Sí, me doy cuenta de que esto es arriesgado, pero en realidad solo hay un par de formularios grandes y un par de plantillas que, si se abordan, marcarán una gran diferencia).

Esto es lo que no estoy recibiendo.

Si un control o página tiene EnableViewState="false" es su descriptor <%.. %>, o en su etiqueta donde se creó en la página primaria, todo se rompe, porque los datos de ViewState añadidos en el código no funcionan. Así que parezco poder dejarlo habilitado en el nivel de control, pero establecí EnableViewState en falso para un control de envoltura en cada contenedor, y luego configuré ViewStateMode=true (lo que supera eso) en un nivel por control.

Lo que no recibo 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 ser capaz de desactivar todo en un control contenedor pero aún así asegurar que:

1) configuración ViewState en el trabajo código, y

2) ViewState está desactivado para todos los controles de forma predeterminada y

3) Puedo habilitar selectivamente ViewState para los subcontroles.

Ésta parece ser la confusión. Si tengo un control de envoltura en la página maestra que está establecido en EnableViewState="false", pero luego configuro un subcontrol en ViewStateMode="Enabled", se rompe. Según MS, ViewStateMode debe reemplazar cualquier configuración externa de ViewState, pero parece que no funciona.

+1

Esta pregunta es muy fácil de responder si se le da una pieza clave de información: ¿Qué versión de ASP.NET? –

+0

¡Lo siento! Asp.net 4.0. –

Respuesta

14

Según el MSDN article on ViewStateMode, ViewStateMode solo tiene significado cuando EnableViewState="true". Para lograr lo que quiere, tendrá que salir ViewStateMode="Enabled" en el mando, y luego envolver los controles secundarios de la principal de ellas en un asp:Placeholder que tiene ViewStateMode="Disabled". De esta forma, aún puede manipular ViewState en el código subyacente, pero ningún control secundario tendrá ViewState (excepto los que explícitamente configura para tenerlo a través del ViewStateMode="Enabled").

+0

Gracias.Me di cuenta de esto después de un poco de confusión y básicamente configuré 'ViewStateMode =" Enabled "' para cada control/página, lo configuré 'Disabled' para un contenedor y lo configuré' Enabled' de nuevo solo para controles específicos. Parece que está funcionando hasta el momento sin muchas sorpresas y la cantidad de basura de ViewState se reduce notablemente. –

Cuestiones relacionadas