asp.net - diferencia - Mantener ViewState en SessionPageStatePersister
diferencia entre viewstate y session (4)
La parte importante del código es
protected override PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
Esto anula la persistencia de estado de página normal y proporciona una que persiste los datos de página a la sesión en lugar de ViewState.
Quiero mantener viewstate de una página específica en sesión pero el siguiente bloque de código no me ayuda, ¿qué podría estar perdiendo?
Así que aquí está el contenido del archivo de código subyacente de mi página;
public partial class ConfigurationEditorWebForm : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override bool VerifyAccess()
{
return true;
}
protected override PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
}
Tenga en cuenta que incluso después de mover el estado de la página para ver el estado, aún verá un elemento __Viewstate en sus páginas.
Además, creo que esta solución puede ser más correcta que las otras ofrecidas, ya que maneja el botón de retroceder un poco más elegantemente. Cuando almacena el ViewState en una variable oculta, se convierte en parte del HTML y, por lo tanto, está disponible si el usuario hace clic en el botón Atrás en 2 o 3 páginas y continúa con lo que estaba haciendo. Si se destruye ciegamente Viewstate con cada solicitud de página, se evitará que el botón Atrás se comporte de la manera que el usuario espera.
Sin embargo, sería negligente observar que, para empezar, probablemente esta no sea una gran idea. Sugeriría hacer al menos dos cosas primero:
Primero, asegúrese de haber desactivado Viewstate en todos los controles que no lo necesitan (que probablemente será la mayoría de ellos). Puede hacer esto estableciendo ''IsViewstateEnabled'' en falso.
Segundo, active la compresión http en su servidor web. Incluso si tiene un estado de visualización de un tamaño razonable, el peso total de la página (cuando se lo comprime, no como se ve en su navegador ) debería ser relativamente pequeño.
¡Espero que ayude!
Mi respuesta probablemente no sea la que usted desea, pero como último recurso, quizás deba hacer algo como esto.
Apliqué el bloqueo de reflejo descrito en https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=240686 y construí mi propio administrador de sesión en proceso y almacené todos los datos de la sesión allí.
Después de encontrar el constructor WYSIWYG generado HTML pobre, cambié a escribir manualmente todo mi HTML con Response.Write.
Presto no más problemas. Mucho trabajo pero valió la pena.
EDITAR: no hay una votación decreciente justa por debajo de 0 porque no le gusta la idea de no tener en cuenta todos los formularios web. Cuando las herramientas no me funcionan, no las uso. Si las herramientas no le funcionan y no puede hacer que funcionen, tampoco debe usarlas.
Lo que podría estar viendo en el campo oculto de ViewState es el ControlState que se almacena de forma diferente al ViewState "normal".
Para almacenar también el ControlState en sesión, agregue la siguiente entrada al archivo web.config:
<system.web>
<browserCaps>
<case>
RequiresControlStateInSession=true
</case>
</browserCaps>
</system.web>
Mira esta página para más.