2010-08-27 13 views

Respuesta

9

ViewState se serializa mediante serialización binaria usando ObjectStateFormatter. Presupuesto de la documentación:

La clase ObjectStateFormatter es optimizada para serializar y formato de muchos tipos de referencia de .NET Framework común, , así como constantes. La siguiente tabla enumera los tipos que están optimizados.

Array, DateTime, Int16, String, ArrayList, doble, Int32, String [], Boolean, Enum, nulo (Nada), String.Empty, Byte, Hashtable, Par, triplete, Char, HybridDictionary , individual, tipo, color, IDictionary,

Además, mientras tipos convencionales para las cuerdas y cuerdas matrices se escriben en y desde un escritor binario serializado inalterada, algunas cadenas están optimizados mediante la creación de tablas de cadenas internos. Las cadenas son optimizadas usando estas tablas si la cadena tiene un objeto asociado TypeConverter o si la cadena es realmente una instancia de la clase IndexedString.

Otros tipos no mencionados anteriormente son binario serializado utilizando un objeto BinaryFormatter si implementan la interfaz ISerializable o están decoradas con el atributo SerializableAttribute. La clase ObjectStateFormatter no está optimizada para ninguno de estos tipos serializables .

Si la clase ObjectStateFormatter se encuentra con un tipo que no es serializable , se lanza una excepción ArgumentException excepción.

Para que un objeto sea binaria serializable en el ViewState tiene que ser decorado con el atributo [Serializable]. Entonces puede poner ViewState cualquier objeto que tenga este atributo. Tenga en cuenta que los tipos simples como string, int, float, ... también se pueden colocar en ViewState.

1

Los tipos deben ser serializables para colocarse en ViewState. ViewState es una colección serializada de objetos por lo que cualquier objeto serializable puede colocarse allí.

0

Casi cualquier cosa que sea serializable. Sin embargo, tenga en cuenta que los datos se enviarán a través del cable entre el servidor y el navegador web (y viceversa, durante las devoluciones), por lo que es posible que desee mantener el volumen bajo, si es posible.

1

Qué objetos, según Darren y Andrew, cualesquiera que sean serializables. ¿Por qué Serializable?Por lo que el Estado puede ser serializado como

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY1NTgzODUwMg9kFgJmD2QWAgIDD2QWAgIBD2QWBgIBDw8WAh4EVGV4dAUXU3VwcGxpZXIgUG9y 

Sin embargo, en la práctica, la necesidad de mantener estado de vista a un mínimo, ya que tiene un ancho de banda/página implicaciones de rendimiento tamaño. Los controles son los usuarios más comunes de viewstate.

1

No coloque objetos del tipo Guid en ViewState. ObjectStateFormatter no los reconoce y se atascan al usar BinaryFormatter en la friolera de 130bytes por GUID. Es mejor guardarlos como cadenas y analizarlos en la lectura. Sin embargo, esto no siempre funciona, por ejemplo, cuando se usa Guid como clave en una grilla.

Además, al cargar/guardar enumeraciones en ViewState, ganará un poco al convertirlas de/a un tipo integral. En la propiedad de su control, usted conoce el tipo de enumeración requerida, y eso no necesita ser codificado en el ViewState serializado.

Vale la pena usar Reflector para verificar la implementación de ObjectStateFormatter y ver cómo se maneja todo, para que pueda comprender el proceso y sus limitaciones.

Cuestiones relacionadas