2012-02-07 12 views
6

È possibile creare un tema predefinito per un sito Web ASP.NET?Temi ASP.NET predefiniti

Per esempio, Se avessi un tema chiamato "Default", e Ive scelto un tema chiamato "NewTheme" e ho fatto riferimento in un file che non esiste nel "NewTheme", ma esiste nel tema "Default" come:

<asp:image id="img" runat="server" ImageUrl="~/Images/image.jpg" /> 

Potrebbe quindi essere preso da "/App_Themes/Default/Images/image.jpg" se non esiste a "/App_Themes/NewTheme/Images/image.jpg"?

Inoltre, se una classe CSS non esisteva in "NewTheme", ma è stata eseguita in "Predefinito", potrebbe prendere il valore "Predefinito"? In effetti, penso che sarebbe meglio se prima prendesse tutti gli stili di default, e poi sovrascriva quelli che "NewTheme" hanno quali scontri.

so Riferimenti globali lavoro simile a questo, perché se ive selezionato "es" localizzazione, e una chiave non esiste nel file webreference.resx.es ma lo fa in webreference.resx, poi itll prendere il valore da lì.

Penso che questa sarebbe una funzionalità importante per i temi ASP.NET poiché posso immaginare temi diversi solo con determinate immagini modificate e determinati stili modificati. Non riesco a immaginare ogni immagine e ogni stile sempre totalmente diverso per ogni tema. E quindi senza questa funzionalità, sarà un caso di duplicazione di stili/immagini, di cui non sono un fan (per ovvi motivi!).

+3

Bounty su questo! Adoro le funzionalità di app_themes ma non essere in grado di ereditare un tema di base è un grosso problema. – Malk

risposta

1

Questa funzionalità non è integrata in ASP.NET. Tuttavia, è possibile implementarlo in modo abbastanza semplice:

  1. Collegare l'evento HttpApplication.BeginRequest in Global.asax o in un modulo HTTP personalizzato.
  2. Cerca richieste con URL in "/ App_Themes/NewTheme /".
  3. Verificare se il file su HttpRequest.PhysicalPath esiste.
  4. Se il file non esiste, chiamare HttpContext.RewritePath e sostituire "NewTheme" nell'URL della richiesta con "Predefinito".
+0

Vedi la mia modifica. Pensi che una soluzione del genere funzionerebbe per il CSS? – Curt

+0

Per i CSS, ti consiglio di inserire '@import url (" ../ Default/stylesheet.css ")' all'inizio di "/App_Themes/NewTheme/stylesheet.css" in modo che tutte le normali regole CSS CSS funzionino come solito. –

+0

@Curt: questa risposta non funziona, non è chiaro o stai cercando codice dettagliato? –

2

I temi predefiniti come descritti non sono supportati da ASP.NET. Ci sono regolari Themes e StyleSheetTheme s, ma cambiarli dinamicamente è più utile a livello di richiesta della pagina che per i singoli Controlli o file statici.

È possibile codificare la propria versione di temi per i file statici utilizzando la riscrittura o il routing dell'URL, ma in realtà non sono più Temi.

Per controlli come <asp:Image>, è possibile sovrascriverli e modificare proprietà come ImageUrl in base a quali file esistono in alcune gerarchie di cartelle "tema". Quindi utilizzare la mappatura dei tag per sostituire tutte le istanze di quel controllo con quella nuova, senza richiedere modifiche al markup.

FWIW, l'evento BeginRequest in Global.asax viene richiamato solo per i file dinamici in IIS (anche Cassini lo chiama per le statistiche). Per supportare la statica in IIS, è necessario un HttpModule e sarà inoltre necessario configurare IIS per l'esecuzione in modalità integrata.