2010-01-07 15 views
6

He escrito un poco de código que ayuda con el control de versiones de archivos js. Básicamente gira alrededor del administrador de scripts actual y agrega la ruta del archivo javascript con un hash md5 del archivo. AsíAgregue el parámetro url al archivo css en la carpeta asp themes

<script src="../Javascript/Navigation.js" type="text/javascript"></script> 

convierte

<script src="../Javascript/Navigation.js?md5=70D2B4D1F236C7E340D9152B9E4102C3" type="text/javascript"></script> 

creo que esto es una cosa bastante común hacer (o variantes de la misma). Lo que me cuesta hacer es recoger los archivos css en la carpeta app_themes y hacer lo mismo.

¿Cómo puedo obtener y cambiar los enlaces CSS?

Respuesta

6

Se puede utilizar un adaptador de control para inyectar cuidadosamente este comportamiento en la página de la siguiente manera:

public class PageAdapter : System.Web.UI.Adapters.PageAdapter 
{ 
    protected override void OnPreRender(System.EventArgs e) 
    { 
     foreach (var link in Page.Header.Controls.OfType<HtmlLink>().ToList()) 
      if (link.Attributes["type"].Equals("text/css", StringComparison.OrdinalIgnoreCase)) 
       if (link.Attributes["href"].Contains("/App_Themes/{0}/".Fill(Page.Theme), StringComparison.OrdinalIgnoreCase)) 
        /* process link */ 

     base.OnPreRender(e); 
    } 
} 

se puede conectar mediante el ahorro en lo siguiente como un archivo * .browser en los App_Browsers carpeta:

<browsers> 
    <browser refID="Default"> 
    <controlAdapters> 
     <adapter controlType="System.Web.UI.Page" 
       adapterType="PageAdapter" /> 
    </controlAdapters> 
    </browser> 
</browsers> 

general, creo que adaptadores de control son un poderoso mecanismo de AOP-como para inyectar int comportamiento o ciclos de vida de control/página; se ignoran casi por completo a favor de la subclasificación tradicional.

1

Evite inventar la rueda dos veces usando Combres en su lugar. Hace todo lo que pides, y más!

2

Me enfrenta un problema que está repitiendo la entrada de css en el marcado HTML en cada devolución. por ejemplo, tengo newabc.css. el código lo cambiará a newabc.css? v = 1. si veo fuente html después de 5 postback, tendrá 5 "newabc.css? v = 1". así que agregué link.EnableViewState = False, funciona bien, pero ¿es realmente necesario?

+0

Tuve el mismo problema. De hecho, tengo varios archivos css en la carpeta App_Themes y después de una devolución de datos la página se refiere al primer archivo css en todas las etiquetas de enlace en la cabeza. Por ejemplo: Tengo a.css, b.css y c.css. ¡La página termina con 3 enlaces a todos haciendo referencia a a.css! Establecer el EnableViewState en falso parece ser la solución para esto. – AlbertVanHalen

Cuestiones relacionadas