2008-09-10 27 views

Respuesta

7

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.

Como una práctica recomendada, no estoy seguro de por qué querría 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 se está encaminando por el camino correcto para evitar los diversos atributos de estilo ASP.NET incorporados, pero debe llevarlo hasta el final y mantener el CSS fuera de su .dll.

2

he utilizado archivos CSS como Embedded resources.

+0

Sí, pero en ese caso, ¿existe una alternativa limpia a ClientScriptManager.RegisterClientScriptResource para el uso de CSS? –

7

Puede añadir enlaces de cabecera de los archivos CSS en las clases de código subyacente ASP.Net así:

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); 

Se puede recorrer los controles de cabecera de antemano para ver si ya está ahí. 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.RegisterClientScriptSource, tienen funciones equivalentes para comprobar si ya se han registrado (por ejemplo, IsClientScriptrResourceRegistered).

+0

vea el método HeadContainsLinkHref en esta respuesta: http://stackoverflow.com/questions/1510766/build-events-and-versioning-js-and-css-files. "mira si ya está ahí" para ti – russau

0

Una idea más: es posible que desee considerar el "espacio de nombres" de los nombres de su clase para evitar colisiones con los nombres de clase comunes que sus consumidores ya podrían estar utilizando. P.ej.

<div class="SmillerControls_Toolbar"> 
    <a class="SmillerControls_Button" ...>...</a> 
    ... 
</div> 

o se puede envolver todo en una sola clase "nombre" y luego escribir el CSS para que:

<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 
{ 
    ... 
} 
0

Lo que hacer es usar un

<asp:Literal id="cssliteral" runat="server" /> 

en la cabeza y luego un StringBuilder en PageLoad que contiene la secuencia de comandos dinámica css.

StingBuilder str = new StringBuilder(); 
str.Append("<style type="text/css">"); 
str.Append(".myclass {background-color:#" + mycolor); 
str.Append("</style>"); 

cssLiteral.Text = str.ToString(); 
2

sólo comprueban la existencia de una escritura registrada, y si usted encuentra que no está ahí, entonces usted sabe que es la primera vez que se está creando 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.

Cuestiones relacionadas