ASP.NET 4.0 ha cambiado la forma de renderizar los controles Web. Ahora, para representarlos en las páginas resultantes, genera HTML que cumple con los estándares de la W3C. En concreto los controles de ASP.NET 4.0 Web Forms generan XHTML 1.0 Strict.

XHTML_tag
Viñeta por Gabriel Utasi

Esto es fantástico para la mayor parte de los casos, ya que nos ayudará a que nuestras aplicaciones con ASP.NET Web Forms se adapten más fácilmente a los estándares y los requisitos de accesibilidad. Sin embargo puede darnos más de un dolor de cabeza en caso de que estemos reusando código CSS o Javascript que hayamos hecho con una versión anterior. También podría trastocarnos algunos maquetados de páginas hechos con versiones anteriores de la plataforma.

Para poder volver al comportamiento anterior de ASP.NET 3.5 (en realidad 2.0) y poder elegir la forma de renderizar los controles y por tanto el tipo de HTML generado, los controles tienen una nueva propiedad llamada RenderingCompatibility. Sin embargo esta propiedad, aunque es pública y su "setter" es accesible, no se debe usar directamente, ya que la propia documentación MSDN en el enlace anterior te avisa de que "puede tener efectos impredecibles". Además, generalmente no tendrá mucho sentido hacer que un control concreto se renderice de manera diferente al resto de los controles de la página.

Así que existe un nuevo ajuste en web.config que nos permite seleccionar si queremos que los controles se rendericen como ASP.NET 4.0 o ASP.NET 3.5: ControlRenderingCompatibilityVersion. En este atributo ajustamos el modo de renderizado y ASP.NET automáticamente se ocupa de asignar la propiedad anterior en todos los controles.

Existen dos posibles valores: 3.5 y 4.0 (el valor por defecto).

Si en nuestro web.config ponemos esto:

<system.web>
  <pages controlRenderingCompatibilityVersion="3.5"/>
</system.web>

conseguiremos que los controles se rendericen como en la versión anterior de ASP.NET.

Esto significa en realidad que se van a renderizar en función de lo que indiquemos en el atributo xhtmlConformance, del que ya he hablado en otras ocasiones en este blog. Con él podremos decidir si se genera XHTML Strict, XHTML Trqansitional (lo habitual) o código no conformante con XHTML (Legacy).

Si no establecemos la compatibilidad con 3.5, ASP.NET 4.0 hace caso omiso del atributo xhtmlConformance y siempre genera XHTML Strict.

Algunos cambios llamativos en el HTML de controles

Hay un ejemplo muy llamativo del cambio de renderizado de ASP.NET 4.0 y se refiere a los controles que se establecen como deshabilitados.

En ASP.NET 2.0 hasta 3.5, cuando se establece la propiedad Enabled de un control como False para deshabilitarlo, lo que se consigue es que la etiqueta o etiquetas HTML correspondientes se deshabiliten mediante el atributo disabled. Así, por ejemplo, si deshabilitamos un control Label, así:

<asp:Label id="Label1" runat="server" Text="Etiqueta" Enabled="false">

lo que obtenemos en el HTML es esto:

<span id="Label1" disabled="disabled">Etiqueta</span>

El problema es que en XHTML 1.1 define este atributo únicamente para los controles de entrada de datos en formularios, es decir, que el atributo sólo se le aplica a los elementos HTML de tipo INPUT, SELECT, BUTTON, TEXTAREA, OPTION y OPTGROUP, como indica el estándar.

¿Entonces cómo se representan ahora las otras etiquetas que estén deshabilitadas?. Pues en el caso de un Label así:

<span id="Label1" class="aspNetDisabled">Etiqueta</span>

Esa clase CSS, , no está definida en ninguna parte, pero podemos definirla nosotros mismos en nuestra hoja de estilos de la página  para darle el aspecto que deseemos al control. Pero claro, por defecto, no notaremos diferencia en el aspecto del mismo.

Si queremos cambiar el nombre de la clase CSS usando la nueva propiedad de los controles estándar llamada DisabledCssClass, que es una cadena de texto con el nombre del estilo CSS.

¡Espero que te sea útil!

Aprende .NET, Cursos on-line tutelados:
   ·
Desarrollo Web con ASP.NET 4.0 Web Forms (Tutelado por mi)
   · ASP.NET 4.0 Web Forms desde cero (Tutelado por mi)
   · Desarrollo Web con ASP.NET MVC 2
   · Silverlight 4.0 - Aplicaciones Ricas para Internet (RIA)
   · jQuery paso a paso para programadores ASP.NET
   · Visual Studio 2010 desde cero

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor