Общие сведения о темах и обложках ASP.NET

Обновлен: Ноябрь 2007

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

Темы и обложки элементов управления

Темы состоят из набора элементов: обложек, каскадных таблиц стилей (CSS), изображений и других ресурсов. Тема содержит как минимум обложки. Темы определяются в специальных каталогах в веб-узле или на веб-сервере.

Обложки

Файл обложки имеет расширение SKIN и содержит параметры для отдельных элементов управления, таких как элементы управления Button, Label, TextBox, или Calendar. Параметры обложки элемента управления схожи с разметкой элемента управления, но содержат только те свойства, которые требуется задавать в составе темы. Например, ниже приведена обложка элемента управления для элемента управления Button:

<asp:button runat="server" BackColor="lightblue" ForeColor="black" />

Файлы обложки создаются в папке Theme. Файл обложки может содержать одну или несколько обложек элементов управления для элементов управления одного или нескольких типов. Можно определять обложки для каждого элемента управления в отдельном файле, или же определить все обложки темы в одном файле.

Существует два типа обложек элементов управления: обложки по умолчанию и именованные обложки:

  • Обложка по умолчанию автоматически применяется ко всем элементам управления одного типа, когда тема применяется к странице. Обложка элементов управления является обложкой по умолчанию, если у нее нет атрибута SkinID. Например, при создании обложки по умолчанию для элемента управления Calendar эта обложка элементов управления применяется ко всем элементам управления Calendar, расположенным на страницах, использующих тему. (Обложки по умолчанию строго соответствуют типам элементов управления; соответственно, обложка элементов управления Button применяется ко всем элементам управления Button, но не к элементам управления LinkButton или элементам управления, являющимися производными от элемента управления Button.)

  • Именованная обложка — это обложка элементов управления с заданным свойством SkinID. Именованные обложки не применяются к элементам управления согласно их типам автоматическим образом. Вместо этого именованную обложку следует явно применять к элементу управления, задавая свойство SkinID элемента управления. Создание именованных обложек позволяет задать разные обложки разным экземплярам одного и того же элемента управления в приложении.

Каскадные таблицы стилей

Тема также может содержать каскадную таблицу стилей (файл CSS). При помещении файла CSS в папку темы таблица стилей автоматически применяется как часть темы. Таблица стилей определяется с использованием расширения имени файла CSS в папке темы.

Графические изображения и другие ресурсы темы

Темы также могут включать графические изображения или другие ресурсы, такие как файлы сценариев или звуковые файлы. Например, часть темы страницы может содержать обложку для элемента управления TreeView. В состав темы можно включить графические изображения, используемые для представления кнопок развертывания и свертывания.

Обычно файлы ресурсов находятся в той же папке, что и файлы обложки для темы, но они также могут находиться в любом месте веб-приложения, например, в дочерней папке папки темы. Для ссылки на файл ресурсов, находящийся в папке, дочерней по отношению к папке темы, используется путь, схожий с показанным в следующей обложке элементов управления Image:

<asp:Image runat="server" ImageUrl="ThemeSubfolder/filename.ext" />

Файлы ресурсов также можно размещать вне папки темы. При использовании тильды ("~") в синтаксисе ссылок на файлы ресурсов веб-приложение автоматически найдет изображения. Например, если поместить ресурсы темы в дочернюю папку приложения, для ссылки на файлы ресурсов можно использовать путь вида ~/Подпапка/имяфайла.расширение.

<asp:Image runat="server" ImageUrl="~/AppSubfolder/filename.ext" />

Изоляция тем

Можно определять темы для отдельного веб-приложения или же определять их в качестве глобальных тем, используемых для всех приложений на веб-сервере. После того, как тема определена, она может быть помещена на отдельные страницы с помощью атрибута Theme или атрибута StyleSheetTheme директивы @ Page; она также может быть применена ко всем страницам в приложении путем установки элемента <pages> в файле конфигурации приложения. Если элемент <pages> определен в файле Machine.config, тема будет применена ко всем веб-приложениям на сервере.

Темы страниц

Тема страницы — это папка темы с обложками элементов управления, таблицами стилей, графическими файлами и другими ресурсами, созданная в качестве дочерней папки по отношению к папке \App_Themes веб-узла. Каждая тема является отдельной дочерней папкой папки \App_Themes. В следующем примере показана типичная тема страницы, определяющая две темы с именами BlueTheme и PinkTheme.

MyWebSite
  App_Themes
    BlueTheme
      Controls.skin
      BlueTheme.css
    PinkTheme
      Controls.skin
      PinkTheme.css

Глобальные темы

Глобальная тема — это тема, которая может быть применена ко всем веб-узлам на сервере. Глобальные темы позволяют определить общий вид домена в том случае, если на одном сервере находится несколько веб-узлов.

Глобальные темы похожи на темы страниц в том, что также содержат параметры свойств, параметры таблиц стилей и изображения. Тем не менее, глобальные темы хранятся в папке Themes, единой для всего веб-сервера. Любой веб-узел на сервере и любая страница в любом веб-узле могут ссылаться на глобальную тему.

Приоритет параметров тем

Можно определить приоритет, который параметры тем будут иметь над локальными параметрами элементов управления, указав, каким образом применяется тема.

Если задать свойство Theme страницы, будет выполняться слияние параметров элементов управления в теме и странице для формирования итоговых параметров элемента управления. Если параметр элемента управления определен и в элементе управления и в теме, параметры элементов управления из темы переопределяют любые параметры страницы для элемента. Данная стратегия позволяет теме формировать последовательный вид страниц, даже если элементы управления на страницах имеют разные параметры свойств. Например, это позволяет применять тему к странице, созданной в более ранней версии ASP.NET.

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

Элементы глобальной темы не могут быть частично заменены элементами тем уровня приложения. При создании темы уровня приложения с тем же именем, что и у глобальной темы, элементы темы уровня приложения не будут переопределять элементы глобальной темы.

Свойства, определяемые с помощью тем

Как правило, темы можно использовать для определения свойств, касающихся внешнего вида страницы, элемента управления или статического содержимого. Задавать можно лишь те свойства, атрибут ThemeableAttribute которых в классе элемента управления имеет значение true.

Свойства, явным образом задающие поведение элемента управления, а не его вид, не принимают значения тем. Например, с помощью темы нельзя задать свойство CommandName элемента управления Button. Также нельзя использовать тему для установки свойства AllowPaging или DataSource элемента управления GridView.

Обратите внимание, что в темах и обложках нельзя использовать построители выражений, создающие выражения кода для присваиваний на странице во время компиляции.

Темы в сравнении с каскадными таблицами стилей

Темы похожи на каскадные таблицы стилей в том, что и темы, и каскадные таблицы стилей определяют набор общих атрибутов, который может быть применен к любой странице. Однако темы отличаются от таблиц стилей следующим образом:

  • Темы могут определять многочисленные свойства страницы или элемента управления, а не только свойства стиля. Например, можно определить графическое изображение для элемента управления TreeView, структуру шаблона элемента управления GridView и так далее.

  • Темы могут включать в себя графические изображения.

  • Темы не раскрываются последовательно так, как таблицы стилей. По умолчанию любые значения свойств в теме, на которую ссылается свойство Theme страницы, переопределяют значения свойств, заданных для элемента управления, если не применять тему, используя свойство StyleSheetTheme. Дополнительные сведения см. выше в разделе "Приоритет параметров тем".

  • К каждой странице может быть применена только одна тема. К странице нельзя применить несколько тем, в отличие от таблиц стилей, где к одной странице могут быть применены несколько таблиц стилей.

Вопросы безопасности

Использование тем на веб-узле может привести к возникновению проблем безопасности. Вредоносные темы могут:

  • Изменять поведение элемента управления непредвиденным образом.

  • Внедрять клиентские сценарии, что приводит к возникновению риска выполнения межузловых сценариев.

  • Изменять ход проверки.

  • Раскрывать важную информацию.

  • Способы борьбы с этими угрозами:

  • Защита папок глобальных тем и тем приложений с помощью соответствующих параметров контроля доступа. Разрешение на запись файлов в каталоги тем должны иметь только доверенные пользователи.

  • Отказ от использования тем из непроверенных источников. Перед использованием тем, полученных от третьих сторон, на веб-узле, всегда следует проверять их на наличие вредоносного кода.

  • Отказ от раскрытия имени темы в данных запроса. Злонамеренные пользователи могут применить данную информацию для внедрения тем, неизвестных разработчику, получая таким образом доступ к важной информации.

См. также

Задачи

Практическое руководство. Определение тем страницы ASP.NET

Практическое руководство. Применение тем ASP.NET