ASP.NET темы по умолчанию
Можно ли создать тему по умолчанию для веб-сайта ASP.NET?
Например, если у меня была тема под названием "Default"
и выбрал тему под названием "NewTheme"
и я сослался на файл, который не существует в "NewTheme"
но существует в "Default"
тема как:
<asp:image id="img" runat="server" ImageUrl="~/Images/image.jpg" />
Может ли это быть тогда взято из "/App_Themes/Default/Images/image.jpg"
если он не существует в "/App_Themes/NewTheme/Images/image.jpg"
?
Кроме того, если CSS-класс не существует в "NewTheme", но существует в "Default", то может ли он принять "Default"? На самом деле, я думаю, что было бы лучше, если бы сначала использовались все стили по умолчанию, а затем переопределялись все те, которые есть у "NewTheme", которые конфликтуют.
Я знаю, что Глобальные ссылки работают аналогично этому, потому что если я выбрал "es"
локализация, и ключ не существует в webreference.resx.es
файл, но это делает в webreference.resx
, тогда он возьмет значение оттуда.
Я думаю, что это будет важной функциональностью для тем ASP.NET, так как я могу представить разные темы только с изменением определенных изображений и изменением определенных стилей. Я не могу представить, чтобы каждое изображение и каждый стиль были совершенно разными для каждой темы. И поэтому без этой функциональности будет происходить дублирование стилей / изображений, которыми я не являюсь поклонником (по очевидным причинам!).
2 ответа
Эта функциональность не встроена в ASP.NET. Тем не менее, вы можете реализовать это довольно легко:
- Крюк
HttpApplication.BeginRequest
событие в Global.asax или в пользовательском модуле HTTP. - Ищите запросы с URL-адресами в разделе "/App_Themes/NewTheme/".
- Проверьте, есть ли файл в
HttpRequest.PhysicalPath
существует. - Если файл не существует, позвоните
HttpContext.RewritePath
и замените "NewTheme" в URL запроса на "По умолчанию".
Темы по умолчанию, как вы описываете, не поддерживаются ASP.NET. Есть регулярные Themes
а также StyleSheetTheme
s, но их динамическое изменение более полезно на уровне запроса страницы, чем для отдельных элементов управления или статических файлов.
Вы можете закодировать свою собственную версию тем для статических файлов, используя переписывание URL или маршрутизацию - но тогда это уже не Темы.
Для элементов управления, таких как <asp:Image>
Вы можете переопределить их и изменить свойства, такие как ImageUrl
основанный на том, какие файлы существуют в некоторой иерархии папок "темы". Затем используйте сопоставление тегов, чтобы заменить все экземпляры этого элемента управления новым, не требуя изменений разметки.
FWIW, BeginRequest
Событие в Global.asax вызывается только для динамических файлов в IIS (Кассини также вызывает его для статики). Для поддержки статики в IIS вам понадобится HttpModule
и вам также нужно настроить IIS для работы в интегрированном режиме.