Penso di avere una soluzione rapida e sporca. Il trucco è quello di esaminare i controlli all'interno della pagina (ad esempio nella fase di PreRender
), trovare i link che puntano al CSS-files nella cartella App_Themes
e renderli dinamici (con l'aggiunta di alcune informazioni casuali alla query-string). Molto probabilmente dirà al browser di invalidare la versione cache del file.
Il codice:
protected void Page_PreRender(object sender, EventArgs e)
{
HtmlLink link = null;
foreach (Control c in Header.Controls)
{
if (c is HtmlLink)
{
link = c as HtmlLink;
if (link.Href.IndexOf("App_Themes/", StringComparison.InvariantCultureIgnoreCase) >= 0 &&
link.Href.EndsWith(".css", StringComparison.InvariantCultureIgnoreCase))
{
link.Href += string.Format("?t={0}", DateTime.Now.Ticks.ToString());
}
}
}
}
L'output:
<link href="App_Themes/MyTheme/MyTheme.css?t=634310637798128189"
type="text/css" rel="stylesheet" />
Si noti che è necessario disporre di un <head runat="server">
dichiarato nel markup della tua pagina in modo da essere in grado di accedere alla proprietà Header
(altrimenti sarà null
).
Ciao Omero, non so se questo funzionerà o meno come il suo solo una teoria. I browser indovinare nascondono il file css e ottengono una nuova versione se possono vederlo modificato. La mia idea sarebbe di avere una classe nel file css che non è usato e diverso per ogni tema. Se questa classe si trova all'inizio di ogni file css, il browser la leggerà, vedrà il nome della classe diversa e scaricherà nuovamente il file css. Questo è, naturalmente, tutti basati su ipotesi e nessuna conoscenza su come internet explorer cache CSS. Sarei interessato anche se qualcun altro può parlare con autorità su questo! – WraithNath
Sono un po 'confused- Quando si utilizza un tema diverso il foglio di stile si trova in un'altra cartella cioè /App_Themes/blue/stylesheet.css vs /App_Themes/red/stylesheet.css. Quel cambiamento di directory è sufficiente a far sì che non venga memorizzato nella cache. Ora, ovviamente rosso/foglio di stile.css sarà ancora memorizzato nella cache, ma se cambi temi in blu, questo caricherà quello blu (che potrebbe essere memorizzato nella cache). – Prescott
Non sto scambiando temi, semplicemente modificando il file css. – Homer