Cómo modificar la salida de una página a nuestra voluntad

Pueden existir ocasiones en las que la salida que nos devuelve una página ASPX no es de nuestro agrado.


Si queremos modificar de algún modo el HTML puro y duro que devuelve una página podemos sobrescribir el método Render de la página y ahí actuar a voluntad sobre el HTML generado.


Por ejemplo, imaginemos que queremos que todas nuestras páginas, automáticamente, lleven una nota de copyright justo al final (vale, sé que hay muchas formas de hacerlo sin complicarse, hasta con el propio IIS, pero es sólo un ejemplo para ilustrar el concepto). Lo que podemos hacer es capturar el renderizado de la página y modificar el HTML devuelto.


Vamos a hacerlo para una sola página. Lo que tenemos que hacer es sobrescribir el método Render, como ya he dicho. El código en VB (para variar) sería así:


Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
  Dim sw As New StringWriter
  Dim htmlsw As New System.Web.UI.HtmlTextWriter(sw)
  ‘Se renderiza la página
  MyBase.Render(htmlsw)

  ‘Se recupera el HTML
  Dim html As String
  html = sw.ToString()

  ‘Ahora se localiza el final de la página
  Dim pos As Integer
  pos = html.LastIndexOf(«</body>»)

  ‘y se inserta un copyright
  If (pos >= 0) Then
    html = html.Insert(pos 1, «(c) José Manuel Alarcón 2007»)
  End If

  ‘Ahora se escribe a la salida de la página, representada por el parámetro HtmltextWriter
  writer.Write(html)
End Sub


Es decir, el primer bloque hace que la página se renderice en nuestro propio «stream» en lugar de en el stream por defecto. Después lo transformamos en una cadena de texto para poder trabajar directamente sobre ella y hacer lo que queramos. Usando expresiones regulares podemos hacer lo que queramos sobre este HTML, lo que nos da una potencia increible, aunque hay que tener cuidado de no tocar nada que haga que la página deje de funcionar.


En nuestro caso de ejemplo simplemente buscamos en donde está el final del cuerpo de la página y metemos justo antes una nota de copyright.


Finalmente hay que escribir el contenido de la cadena al stream que ASP.NET se encarga de enviar al navegador del usuario, que es el que se nos pasa como parámetro a este método.


Con eso hemos modificado al vuelo nuestra página.


Para que todas las páginas hagan esto odemos crear una clase que herede de Page y luego hacer que nuestras páginas hereden de ésta.


Si le echas un poco de imaginación te darás cuenta de que esto abre todo un mundo de posibilidades: desde crear tu propia infraestructura de personalización de páginas y plantillas, hasta la adaptación manual a ciertos dispositivos o circunstancias de los clientes. En la plataforma ya hay formas de hacer todo esto, pero con esta técnica sencilla se nos abren otras posibilidades.


Que lo disfrutes.

Sin categoría

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *