2012-02-07 20 views
6

Czy można utworzyć domyślny motyw witryny ASP.NET?Domyślne motywy ASP.NET

Na przykład, gdybym miał motyw o nazwie "Default" i ive wybrany motyw nazywa "NewTheme" i odwołuje pliku, który nie istnieje w "NewTheme" ale nie istnieje w "Default" tematu jak:

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

Czy można go następnie pobrać z "/App_Themes/Default/Images/image.jpg", jeśli nie istnieje pod adresem "/App_Themes/NewTheme/Images/image.jpg"?

Co więcej, jeśli klasa CSS nie istniała w "NewTheme", ale zrobiła to w "Default", to czy może przyjąć "Default"? Myślę, że byłoby lepiej, gdyby najpierw wziął wszystkie domyślne style, a następnie nadpisuje wszelkie, które "NewTheme" mają, co się zderza.

wiem Referencje globalne działają podobnie do tego, bo jeśli ive wybrany "es" lokalizację, a klucz nie istnieje w pliku webreference.resx.es ale robi się webreference.resx, następnie itll przyjąć wartość z tam.

Myślę, że byłaby to ważna funkcjonalność dla motywów ASP.NET, ponieważ mogę wyobrazić sobie różne motywy tylko po zmianie niektórych obrazów i zmianie niektórych stylów. Nie potrafię sobie wyobrazić każdego obrazu i każdego stylu, który zawsze będzie zupełnie inny dla każdego motywu. I dlatego bez tej funkcjonalności, będzie to przypadek powielania stylów/obrazów, z których nie jestem fanem (z oczywistych względów!).

+3

Bounty na tym! Uwielbiam funkcjonalność app_themes, ale brak możliwości odziedziczenia motywu bazowego to poważny problem. – Malk

Odpowiedz

1

Ta funkcja nie jest wbudowana w ASP.NET. Mimo to można go łatwo wdrożyć:

  1. Hak zdarzenia HttpApplication.BeginRequest w pliku Global.asax lub w niestandardowym module HTTP.
  2. Wyszukaj żądania z adresami URL w "/ App_Themes/NewTheme /".
  3. Sprawdź, czy plik o numerze HttpRequest.PhysicalPath istnieje.
  4. Jeśli plik nie istnieje, należy zadzwonić pod numer HttpContext.RewritePath i zamienić "NowyTemat" w adresie URL żądania na "Domyślny".
+0

Proszę zobaczyć moją edycję. Czy uważasz, że taka poprawka zadziała w przypadku CSS? – Curt

+0

Dla CSS zalecam umieszczenie '@import url (" ../ Default/stylesheet.css ")' u góry "/App_Themes/NewTheme/stylesheet.css", aby wszystkie normalne reguły kaskadowania CSS działały jak zwykły. –

+0

@Curt: Czy ta odpowiedź nie działa, czy jest niejasna, czy szukasz szczegółowego kodu? –

2

Motywy domyślne, zgodnie z opisem, nie są obsługiwane przez środowisko ASP.NET. Istnieją regularne Themes i StyleSheetTheme s, ale ich dynamiczna zmiana jest bardziej przydatna na poziomie Żądania strony niż w przypadku pojedynczych elementów sterujących lub plików statycznych.

Możesz kodować swoją własną wersję tematów dla plików statycznych za pomocą przepisywania adresów URL lub routingu - ale to już nie są tak naprawdę Motywy.

W przypadku elementów sterujących, takich jak <asp:Image>, można je zastąpić i zmodyfikować właściwości, takie jak ImageUrl, w zależności od tego, które pliki istnieją w niektórych hierarchiach folderów "tematów". Następnie użyj mapowania tagów, aby zamienić wszystkie wystąpienia tego formantu na nowe, bez konieczności wprowadzania zmian w znacznikach.

Zdarzenie FWIW, BeginRequest w pliku Global.asax jest wywoływane tylko w przypadku plików dynamicznych w usługach IIS (Cassini również nazywa to statycznie). Aby obsługiwać statykę w IIS, potrzebujesz HttpModule, a także będziesz musiał skonfigurować IIS, aby działał w trybie zintegrowanym.