Empecemos diciendo que el viewstate es una cosa buena, porque permite mantener el valor de los controles entre postbacks, hasta allí vamos bien.
Ahora reconozcamos que no siempre necesitamos el viewstate, por ejemplo cuando en una página no estamos usando los eventos de los controles de servidor, o no necesitamos que se guarden los valores seleccionados o los valores tipeados en las cajas de texto. Si la página tiene puro links : no necesitamos el viewstate. Si queremos tener en cuenta los temas de SEO, hay que remover el viewstate o mandarlo al final de la página (ese es otro post).
Dicho esto, pasemos al punto.
Muchos dirán: pero no es tan simple como poner EnableViewState="false" dentro de la etiqueta @Page??
La respuesta es: con eso no basta!! esa solución lo que hace es desactivar el viewstate, pero siempre deja alguito, algo así queda:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="5T+3JgqekJWbvZyuLx4GpA9VTW9jKuvoPAY61ijYuVwWECgef" />
lo cual para muchos casos será suficiente. Sin embargo no para mí. Pongamos el caso de que haces una página que también será vista desde dispositivos móviles, entonces, para este caso, es ideal tener una página lo menos pesada posible. Otro punto es que si a esta página le haces una prueba de compatibilidad sobre dispositivos móviles, arrojará que hay una etiqueta llamada <input name=”__VIEWSTATE” … /> que no es reconocida, dado que los browsers móviles tienen un conjunto menor de etiquetas html compatibles… aunque esto en un futuro no muy lejano pasará a la historia. Ya vamos a empezar a hacer posts acerca de desarrollo web para móviles (si les parece, claro).
Otro punto a mi favor sería que simplemente no quieres ver esa etiqueta en tu html ;)
Entonces, para remover definitivamente el <input name=”__VIEWSTATE” … /> pon este código dentro de tu página:
'remove definitively the _VIEWSTATE Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Dim stringWriter As New System.IO.StringWriter() Dim htmlWriter As New HtmlTextWriter(stringWriter) MyBase.Render(htmlWriter) Dim html As String = stringWriter.ToString() Dim startPoint As Integer = html.IndexOf("<input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE""") If startPoint >= 0 Then Dim endPoint As Integer = html.IndexOf("/>", startPoint) + 2 Dim viewstateInput As String = html.Substring(startPoint, endPoint - startPoint) html = html.Remove(startPoint, endPoint - startPoint) Dim formEndStart As Integer = html.IndexOf("</form>") - 1 End If writer.Write(html) End Sub
Eso es todo. Espero que les sea de utilidad ;)
No hay comentarios.:
Publicar un comentario