Modificado!
Este artículo se centra en una buena práctica de manipulación del viewstate, no en el concepto de viewstate... para aquellos que aún no sepan de viewstate, pueden revisar este artículo: Understanding ASP.NET View State
Hay que encapsular al viewstate, me refiero a que es recomendable meter al viewstate en una propiedad y de esta manera asignamos o recuperamos su valor.
En anteriores posts, hemos sugerido lo mismo para encapsular el objeto session y para encapsular las configuraciones del web.config.
Y cuando digo que hay que encapsular al viewstate es porque hay que encapsularlo, sino estamos propensos a errores inocentes que nos pueden hacer perder tiempo por errores tan simples como tipear mal el nombre del viewstate (ya que el viewstate es sensible a minúsculas o mayúsculas, osea no es lo mismo Viewstate("View001") que Viewstate("view001") ) o asegurarse que siempre devuelva un valor por defecto... como si fuera poco, nos ahorra tipeo, osea tiempo.
Veamos como es eso de las propiedades.
Digamos que necesito guardar tres valores: Nombre, Apellido y ID... estos valores se manipulan en una página default.aspx... entonces:
1.- En el code-beside añadimos tres propiedades y tres constantes privadas, así:
'default.aspx.vb
Private Const _firstname As String = "Firstname"
Private Const _lastname As String = "Lastname"
Private Const _userID As String = "UserID"
Private Property FirstName() As String
Get
If IsNothing(Viewstate(_firstname)) Then Return String.Empty
Return ViewState(_firstname)
End Get
Set(ByVal value As String)
ViewState(_firstname) = value
End Set
End Property
Private Property LastName() As String
Get
If IsNothing(ViewState(_lastname)) Then Return String.Empty
Return ViewState(_lastname)
End Get
Set(ByVal value As String)
ViewState(_lastname) = value
End Set
End Property
Private Property UserID() As Integer
Get
If IsNothing(ViewState(_userID)) Then Return 0
Return ViewState(_userID)
End Get
Set(ByVal value As Integer)
ViewState(_userID) = value
End Set
End Property
Le podemos añadir todas las propiedades que necesitemos según los requerimientos de la aplicación... por ahora es suficiente como está.
Observe lo simple que resulta cargar las propiedades sin incurrir en errores:
Me.UserID = 1
Me.FirstName = "Gianmarcos"
Me.LastName = "Zignago"
Obviamente si a la propiedad UserID le asignamos un texto... ocurrirá una excepción... si no desean mostrar la pantalla de error que se muestra por defecto, puede personalizar el mensaje.
Es igual de sencillo obtener el valor de estas propiedades:
lblUserID.Text = Me.UserID
lblFirstName.Text = Me.FirstName
lblLastName.Text = Me.LastName
Dense cuenta que además hemos eliminado la posibilidad que devuelva un valor nulo (null en c# y nothing en vb ).
2 comentarios:
Hola, esperaba algo un tanto cuanto distinto pues aquí lo que veo es que se esta encapsulando de nuevo todo en el objeto session, en el cual no es conveniente almacenar cierto tipo de objetos que si bien tampoco son muy recomendables de almacenar en el viewstate me parece menos costoso en recursos del servidor pues ahi la carga se esta enviando a los clientes...
Me esperaba que el objeto cViewstate recibiera en e constructor algun parametro o similar...
¿Es posible hacerlo asi como planteo?
Aprovecho para enviarle un cordial saludo y mi agradecimiento por los posts tan interesantes que he estado leyendo ultimamente aqui...
Gracias
Hola Sergio,
Cometí una burrada... dado el escaso tiempo libre que me queda traté de hacer un artículo en 10 minutos... y me equivoqué en lugar de SESSION puse VIEWSTATE... te agradezco que hayas sido franco en tu comentario, sino lo hubieses hecho tal vez nunca me daba cuenta del error.
por ahora ya está corregido el artículo (gracias nuevamente), cuando tenga un poquito más de tiempo profundizaremos en formas más sofisticadas de manipulación del viewstate.
Publicar un comentario