Visual Studio: Evitar advertencias por clases CSS inexistentes

Visual Studio tiene su sistema de validación para web, que es relativamente bueno. Sin tomar en cuenta el hecho de que no reconoce estándares web que Internet Exploiter no conozca (es decir, la mayoría), nos ayuda a encontrar más fácilmente las clases de estilos que nosotros mismos definimos.

Ahora bien, si estamos trabajando sobre un WebUserControl, o si agregamos una hoja de estilos dinámicamente (desde C#/VB, en el código de servidor de la página), o simplemente si a un elemento le agregamos una clase porque la vamos a usar en javascript, en el servidor o donde sea, pero mientras Visual Studio no encuentre esa clase definida en una hoja de estilos, la subrayará y quedará en la lista de errores como una advertencia (warning) por clase no definida.

Las advertencias no detienen el funcionamiento del sitio o aplicación web que estamos creando, pero sí puede resultar molesto ver cómo nuestro registro de errores del proyecto se llena de advertencias que no deberían afectarnos.

Es obligatorio crear la definición de estos estilos en la página. Bastaría con solo declararlos, sin definir ningún estilo en particular, pero sigue siendo un problema que Visual Studio nos obligue a definir algo que no pensamos hacer (y que ocupará unos cuantos bits más en nuestra página. Afortunadamente, existe un truco para "evitar" estas advertencias, definiendo la clase para Visual Studio, pero ocultándola al navegador cuando se cree la página.

<%@ Page Language="C#" %>
<!DOCTYPE HTML>
<html>
<head runat="server">
    <title></title>
    <style type="text/css" runat="server" visible="false">
        .clase1.clase2.clase3{}
    </style>
</head>
<body>
    <div class="clase1">
        <p class="clase2">
            <span class="clase3"Hola</span>
        </p>
    </div>
</body>
</html>

El atributo runat puede aplicarse para cualquier elemento HTML o control de ASP.NET. Cuando el servidor renderiza la página, agrega al objeto Page.Control un control por cada elemento con el atributo runat="server" con su respectiva clase (Label, Panel, TextBox, HtmlInput, HtmlAnchor, etc), y un control de clase LiteralControl por cada fragmento de texto entre un control y otro. Es decir:

  • Un LiteralControl con todo el texto desde el DOCTYPE hasta la etiqueta de apertura de html
  • Un HtmlHead con el elemento head
  • Un LiteralControl con todo el texto desde la etiqueta de apertura de body hasta la de cierre de html

Dentro de head, hace lo mismo. Y en este caso en particular, el elemento style tiene runat="server", por lo que se creará como un control de servidor (HtmlGenericControl, para este caso).

El atributo visible es un atributo de servidor, válido para cualquier control de este tipo, y lo que hace es suprimir el renderizado del elemento HTML correspondiente a ese control. Si nuestro elemento style tiene visible="false", significa que la etiqueta style no se creará en la página web al generarse ésta.

Para los Web User Controls, donde no podemos definir contenido en el elemento head, no hay problema. Por alguna razón, Visual Studio no considera error utilizar una etiqueta style, por lo que podemos agregarla de la misma forma, para evitar las advertencias del programa, y que no se muestren en la página web final, evitando errores en la estructura.

Anuncios

Autor: Israel Muñoz

Soy desarrollador de software, principalmente dedicado a desarrollo de aplicaciones web. Especializado en .NET full-stack, además de tecnologías front-end HTML, CSS y JavaScript. A ratos, profesor de materias de informática. Me gusta mucho todo lo que tiene que ver con las tecnologías nuevas para desarrollo web, y el diseño de sitios y aplicaciones.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s