asp.net - tutorial - utilización de estilos en asp net css
¿Hay un ClientScriptManager.RegisterClientScriptInclude equivalente para CSS (6)
El método ClientScriptManager.RegisterClientScriptInclude le permite registrar una referencia de JavaScript con el objeto de página (verificando si hay duplicados).
¿Hay un equivalente de este método para las referencias CSS?
Se aplican preguntas similares para ClientScriptManager.RegisterClientScriptBlock y ClientScriptManager.RegisterClientScriptResource
He usado archivos css como recursos incrustados .
Puede agregar enlaces de encabezado a archivos CSS en el código ASP.Net detrás de clases como esta:
HtmlLink link = new HtmlLink();
link.Href = "Cases/EditStyles.css";
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
this.Header.Controls.Add(link);
Puede repetir los controles del encabezado de antemano para ver si ya está allí. El ejemplo que se muestra es de un Page_Load en uno de mis proyectos y está dentro de una expresión condicional que solo agrega EditStyles.css si se supone que la página está en el modo "Editar".
Para ClientScriptManager.RegisterClientScriptBlock y ClientScriptManager.RegisterClientScriptResource, tienen funciones equivalentes para comprobar si ya se han registrado (por ejemplo, IsClientScriptrResourceRegistered).
Respuesta corta: no. Ciertamente, podría implementar sus propias funciones (como sugiere CMPalmer) para tomar recursos incrustados de CSS (como sugiere Gulzar) e incrustarlos en la página.
Sin embargo, como cuestión de mejores prácticas, no estoy seguro de por qué querrías hacer esto. Si está haciendo un control reutilizable que tiene mucho estilo CSS, mi consejo sería simplemente codificar los nombres de clase en la salida de su control que cumpla con los estándares, y enviar el control acompañado de una hoja de estilo sugerida. Esto le da a sus usuarios / clientes la opción de anular sus estilos sugeridos para que se ajusten a sus necesidades y, en general, les permite administrar su configuración de CSS como mejor les parezca.
Separar el estilo del marcado es una buena cosa: ya te estás dirigiendo por el camino correcto para evitar los diversos atributos de estilo ASP.NET incorporados, pero debes llevarlo hasta el final y mantener el CSS fuera de tu .dll.
Una idea más: es posible que desee considerar el "espacio de nombres" de los nombres de su clase para evitar colisiones con nombres de clases comunes que sus consumidores ya estén usando. P.ej
<div class="SmillerControls_Toolbar">
<a class="SmillerControls_Button" ...>...</a>
...
</div>
o puede envolver todo en una sola clase de "espacio de nombres" y luego escribir su CSS a eso:
<div class="SmillerControls">
<div class="Toolbar">
<a class="Button" ...>...</a>
</div>
</div>
tu CSS sería como
div.SmillerControls div.Toolbar
{
...
}
div.SmillerControls div.Toolbar a.Button
{
...
}
Lo que hago es usar un
<asp:Literal id="cssliteral" runat="server" />
en la cabeza y luego un StringBuilder en PageLoad que contiene el script dinámico css.
StingBuilder str = new StringBuilder();
str.Append("<style type="text/css">");
str.Append(".myclass {background-color:#" + mycolor);
str.Append("</style>");
cssLiteral.Text = str.ToString();
Simplemente verifique la existencia de un script registrado, y si descubre que no está allí, entonces sabrá que es la primera vez que se crea su control. En ese momento puede simplemente colocar un control literal en su página que apunta al archivo css que desea.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With Page.ClientScript
If Not .IsClientScriptIncludeRegistered("JQuery") Then
.RegisterClientScriptInclude("JQuery", "Scripts/jquery-1.4.2.min.js")
Dim l As New Literal()
l.Text = "<link href=''Uploadify/uploadify.css'' rel=''stylesheet'' type=''text/css'' />"
sender.controls.add(l)
End If
End With
End Sub
Espero que esto ayude a alguien.