ASP.net ViewState: aunque esté deshabilitado, existe un estado de visualización. ¿Por qué?

StackOverflow https://stackoverflow.com/questions/413558

  •  03-07-2019
  •  | 
  •  

Pregunta

Incluso cuando está en la página, la propiedad EnableViewState está deshabilitada, todavía veo un estado de visualización existente en la página:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

Mi pregunta es ¿por qué?

¿Fue útil?

Solución

Esto podría ser controles que están usando ControlState. Cualquier control que tenga un estado de control ignorará la configuración de ViewState.

Otros consejos

Es el estado de control.

Si realmente desea deshacerse de viewstate y controlstate, puede usar este código en el código subyacente para la página, o en cualquier clase de la que se derive el código detrás de

class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

Sin embargo, tenga mucho cuidado al hacer esto, ya que está violando el contrato con los controles. MSDN indica explícitamente que el estado de control siempre está disponible. En la práctica, sin embargo, ha funcionado para mí.

Editar: Desde que fui votado, me gustaría señalar de nuevo: no hagas esto a menos que sepas exactamente lo que estás haciendo. En mi caso, casi toda la aplicación se escribió en javascript del lado del cliente, y en esas pocas ocasiones en las que se produjeron devoluciones, siempre usé la colección Request.Form para recuperar los valores. No use los controles del lado del servidor para nada más que una representación simple si hace esto.

Este artículo es un poco viejo, pero a mi entender, la mayoría de los puntos siguen siendo válidos:

  1. Debe tener una etiqueta de formulario del lado del servidor () en su página ASPX si desea usar ViewState. Se requiere un campo de formulario para que el campo oculto que contiene la información de ViewState pueda publicar en el servidor. Y debe ser un formulario del lado del servidor para que el marco de la página ASP.NET pueda agregar el campo oculto cuando la página se ejecuta en el servidor.
  2. La propia página guarda aproximadamente 20 bytes de información en ViewState, que utiliza para distribuir los datos de PostBack y los valores de ViewState a los controles correctos en la devolución de datos. Por lo tanto, incluso si ViewState está deshabilitado para la página o la aplicación, puede ver algunos bytes restantes en ViewState.
  3. En los casos en que la página no se publica, puede eliminar ViewState de una página omitiendo la etiqueta del lado del servidor.

http://msdn.microsoft.com/en-us/library /ms972427.aspx

Este es un artículo absolutamente fantástico en ViewState si desarrolla en ASP.NET, ¡léalo!

ASP.NET ViewState Helper también es una buena herramienta para ver lo que está pasando en tu ViewState

Controlstate puede ser las causas. El estado de control no puede ser deshabilitado. En ASP.NET 2.0 hay una distinción entre los datos necesarios para hacer un trabajo de control (estado de control) y otros datos (estado de vista)

Y sí, algunos de los controles no funcionan sin el estado de control. Si desea saber cuál lo está causando o qué contiene el estado de visualización, consulte un visor de estado

Los controles que implementan IPostBackEventHandler como Cuadro de texto, casilla de verificación, etc. . mantendrá el estado incluso después de deshabilitar el estado de visualización. La razón es que durante la etapa de carga de datos de devolución de devolución, estos controles obtendrán información de estado del formulario de devolución publicado.

Pero los controles como label que no implementan IPostBackEventHandler no obtendrán ninguna información de estado de los datos publicados atrás y, por lo tanto, dependerán completamente de viewstate para mantener el estado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top