ASP.NET темы по умолчанию - PullRequest
       40

ASP.NET темы по умолчанию

6 голосов
/ 08 февраля 2012

Можно ли создать тему по умолчанию для веб-сайта 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 ]

2 голосов
/ 23 февраля 2012

Темы по умолчанию, как вы описываете, не поддерживаются ASP.NET.Существуют обычные Themes и StyleSheetTheme с, но их динамическое изменение более полезно на уровне запроса страницы, чем для отдельных элементов управления или статических файлов.

Вы можете кодировать собственную версию тем для статических файлов.с помощью перезаписи или маршрутизации URL-адреса, но это уже не Темы.

Для таких элементов управления, как <asp:Image>, вы можете переопределить их и изменить свойства, например ImageUrl, в зависимости от того, какие файлы существуют в некоторой иерархии«тематические» папки.Затем используйте сопоставление тегов, чтобы заменить все экземпляры этого элемента управления новым, не требуя изменений разметки.

FWIW, событие BeginRequest в Global.asax вызывается только для динамических файлов в IIS (вызовы Cassiniэто для статики тоже).Для поддержки статики в IIS вам потребуется HttpModule, а также вам потребуется настроить IIS для работы в интегрированном режиме.

1 голос
/ 08 февраля 2012

Эта функциональность не встроена в ASP.NET. Тем не менее, вы можете реализовать это довольно легко:

  1. Подключите событие HttpApplication.BeginRequest в Global.asax или в пользовательском модуле HTTP.
  2. Поиск запросов с URL-адресами в разделе "/App_Themes/NewTheme/".
  3. Проверьте, существует ли файл в HttpRequest.PhysicalPath.
  4. Если файл не существует, вызовите HttpContext.RewritePath и замените «NewTheme» в URL-адресе запроса на «По умолчанию».
...