2011-04-30 17 views
5

Tengo una clase simple con algunas propiedades y otros datos. Hasta que no adhiero el atributo serializable a la clase, no puedo guardar el objeto de la clase en el estado de visualización.¿Por qué Viewstate puede contener solo objetos serializables?

¿Por qué Viewstate puede contener solo objetos serializables?

+0

La ASP.NET (predeterminada) serializa simplemente el trabajo de esa manera. Existen otras técnicas de identificación de serialización (por ejemplo, DataContracts), pero solo los tipos Serializable-Anotado son compatibles con LosFormatter (más antiguo) y ObjectStateFormatter. (Aunque, ISerializable también podría funcionar, pero nunca lo he probado). –

Respuesta

6

A medida que el estado de vista de la solicitud se pasa de vuelta al navegador como una representación serializada incrustado dentro de la página HTML generada tiene sentido que sólo los objetos serialisable se pueden colocar dentro de ella (de lo contrario puede fallar para representar lo que contiene). Ese estado de vista se deserializa en la próxima solicitud.

http://i.msdn.microsoft.com/dynimg/IC152667.gif gives an example of the typical

Si está utilizando POCO de marcándolos como serialisable debería ser suficiente trivial. Hay un excelente recurso en la comprensión de cómo funciona el estado de vista, lo que es etc aquí:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

Se entra en el ciclo de vida del estado y da detalles sobre gran parte de su implementación y uso de la prospectiva de un desarrollador.

2

Porque ViewState se serializa antes de enviarse al Cliente.

Quizás pueda almacenar sus datos en el objeto Session. Depende de lo que haga su clase y cómo se use.

+1

+1, pero algunos modos de estado de sesión (servidor de estado, servidor SQL) también requieren que los objetos sean serializables – davidsleeps

+0

@davids, tienes razón, mi alternativa Está Mal, –

2

Simplemente porque los datos almacenados en viewstate necesitan ser serializados (y deserializados).

viewstate es esencialmente solo texto, por lo que cualquier elemento almacenado en él debe poder representarse como texto y reconstruirse a partir de ese texto serializado en forma de objeto.

1

Creo que esto resume la respuesta: El estado pierde el control desde su código Asp.Net hasta el manejador HTTP que no entiende su código que saldrá del alcance, y debe serializarlo en un almacén de datos (es esa gran cantidad de basura que ves cuando ves el origen de una página asp.net) y luego la devuelves cuando otra devolución de datos lo requiere.

enter image description here

Cuestiones relacionadas