2009-01-05 15 views

Respuesta

4

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

+0

Supongo que algunos de los controles incorporados de ASP.net están usando ControlState? – TimLeung

+0

Correcto. Ver: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx –

+1

No creo que esto sea preciso. Si crea un nuevo formulario web sin controles, todavía hay algún estado de vista. – brendan

3

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

  1. Debe tener una etiqueta de formulario del lado del servidor() en su página ASPX si desea utilizar ViewState. Se requiere un campo de formulario para que el campo oculto que contiene la información de ViewState pueda publicar de nuevo 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 página en sí guarda aproximadamente 20 bytes de información en ViewState, que usa para distribuir los datos de PostBack y los valores de ViewState a los controles correctos en la devolución de datos. Entonces, incluso si ViewState está deshabilitado para la página o aplicación, es posible que vea algunos bytes restantes en ViewState.
  3. En los casos en que la página no se publique nuevamente, puede eliminar ViewState de una página omitiendo la etiqueta del lado del servidor.

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

8

Es el estado de control.

Si realmente quiere deshacerse del estado de vista y ControlState puede utilizar este código en el código subyacente de la página, o en cualquier clase que el código subyacente deriva 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 
} 

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

Editar: Como estaba downvoted, me gusta volver a señalar: No hacer esto a menos que sepa exactamente lo que está haciendo. En mi caso, casi toda la aplicación fue escrita en javascript del lado del cliente, y en esas pocas ocasiones en que ocurrieron las devoluciones, siempre utilicé la colección Request.Form para recuperar los valores. No utilice controles del lado del servidor para nada más que renderización simple si hace esto.

+0

-1 esta es una muy mala idea, está introduciendo un posible error por muy poco (si hay) beneficio –

+0

Up-votted, no porque sea una buena idea, sino porque da algunos antecedentes interesantes. –

+1

+1 porque es una idea genial. En realidad porque es útil para mí cuando estoy haciendo una funcionalidad pura del lado del cliente y no necesito viewstate y postbacks. Y definitivamente hay beneficio. Tengo un control que genera alrededor de 20 páginas de viewstate puro para un buen uso porque no lo estoy usando para nada – Sameer

0

Controlstate puede ser la causa. El estado de control no se puede deshabilitar. En ASP.NET 2.0 hay una distinción entre los datos necesarios para hacer que un control funcione (controlstate) y otros datos (viewstate)

Y sí, algunos de los controles no funcionan sin controlstate. Si desea saber cuál está causando o lo que el estado de vista contiene echa un vistazo a un viewstate viewer

2

Este es un artículo absolutamente fantástico en ViewState si se desarrollan en ASP.NET lo lee!

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

0

Los controles que implementa IPostBackEventHandler como cuadro de texto, casilla de verificación, etc. retendrá el estado incluso después de deshabilitar viewstate. El motivo es durante la etapa Cargar datos de devolución de datos, estos controles obtendrán información de estado desde el formulario Volver atrás.

Pero como controles etiqueta que no aplican IPostBackEventHandler no recibirá información de estado a partir de datos publicados vuelta y por lo tanto dependen totalmente de estado de vista para mantener el estado.

Cuestiones relacionadas