Hace unas semanas un lector del blog me escribió comentándome que tenía problemas para validar cierta aplicación Web como XHTML Transitional porque decía que en concreto los controles ImageButton se le renderizaban con un atributo border="0" que no está permitido por XHTML Transitional, y por lo tanto no pasaba la validación de el W3C.

El caso es que a mi me renderizaba correctamente el control (sin border, usando estilos) al ponerle la cabecera del transicional:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

El caso es que todo el problema venía de que, al usar el validador de el W3C para llamar a la URL en la que estaba la página, el módulo de renderización adaptativa de ASP.NET no reconocía el agente de usuario del programa que hacía la descarga 8es decir, no lo reconocía como Internet Explorer, Firefox o cualquier otro navegador), y al no saber qué capacidades tiene el cliente que accede a la página utiliza por lo tanto el menor común denominador. Ello implica usar HTML puro y duro del más rancio y antiguo, por lo que el control ImageButton en este caso se visualizaba con ese marcado no compatible.

El amigo Marc Contijoch que es como se llama el lector encontró la solución el sólo y me ha permitido ponerla aquí, así que ahí va...

Consiste en introducir en web.config el siguiente nodo:

<browserCaps>
  <case match="W3C_Validator*">
    TagWriter = System.Web.UI.HtmlTextWriter
    W3CDomVersion = 1.0
  </case>
</browserCaps>

De este modo si el navegador que accede a nuestra página es el validador de la W3C (que tiene la cadena indicada en el userAgent) se renderiza usando el TagWriter indicado y no da ya problemas.

Al parecer la solución la encontró aquí: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=216241&SiteID=1

Espero que esto le pueda servir a alguien más. ¡Gracias Marc!

Aprovechando este asunto voy a procurar escribir una mini-serie sobre el renderizado de controlas ASP.NET 2.0 y cómo modificarlo, etc... Aunque estos días como se puede comrpobar no he tenido mucho tiempo que digamos y además me voy a Redmond en un par de días, así que no prometo nada sobre tiempos :-(

Escrito por un humano, no por una IA