Скины темы ASP.NET - PullRequest
       22

Скины темы ASP.NET

2 голосов
/ 23 сентября 2009

Есть ли способ применить скин только для элементов управления определенного типа и определенного идентификатора? Например, у меня есть элементы управления по всему сайту, которые используются для отображения номера телефона нашей компании, который выглядит следующим образом:

<asp:Label ID="PhoneLabel" runat="server"></asp:Label>

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

Я знаю, что могу это сделать

<asp:Label runat="server" Text="319-867-5309"></asp:Label>

но при этом будет установлен текст для всех ярлыков на сайте. Я хочу установить текст только для ярлыков с идентификатором PhoneLabel.

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

Разве это невозможно сделать с темами / скинами?

Ответы [ 3 ]

3 голосов
/ 23 сентября 2009

Если вы просто хотите отобразить номер телефона (и хотите изменить его глобально), то следующие два подхода могут быть проще:


Считать номер телефона из файла web.config, например:

<asp:Label runat="server" Text="<%$ AppSettings:PhoneNumber %>"/>

и введите номер телефона в раздел appSettings вашего web.config:

<appSettings>
  <add key="phoneNumber" value="12344"/>

Получите класс из Label, и внутри этого класса установите свойство Text в телефонный номер (либо жестко запрограммированный, либо читающий из конфигурации и т. Д.). Затем, когда вы хотите отобразить номер телефона, используйте этот элемент управления вместо стандартного элемента управления Label, например:

поместите это в App_Code:

namespace MyControls
{
    public class PhoneNumberLabel : Label
    {
        public override string Text
        {
            get { return "123456"; }
            set { base.Text = value; }
        }
    }
}

Затем используйте этот элемент управления для отображения номера телефона:

<%@ Register Assembly="App_Code" Namespace="MyControls" TagPrefix="my" %>
....
<my:PhoneNumberLabel runat="server"></my:PhoneNumberLabel>
1 голос
/ 23 сентября 2009

Да, можно задавать текст, используя файлы скинов, и иметь разный текст в разных темах.

Допустим, у вас есть две темы в вашем проекте: «Theme1» и «Theme2». В каждой теме у вас есть файл с именем «Default.skin».

В вашем файле Theme1 / Default.skin вы установили

<asp:Label runat="server" SkinID="PhoneLabel" Text="319-867-5309"></asp:Label>

В вашем файле Theme2 / Default.skin вы установили

<asp:Label runat="server" SkinID="PhoneLabel" Text="555-555-5555"></asp:Label>

В вашем файле aspx вы установили

<asp:Label ID="PhoneLabel" SkinID="PhoneLabel" runat="server"></asp:Label>

Либо на странице web.config, либо в aspx вы устанавливаете styleSheetTheme на «Theme1», если вам нужно первое число, и «Theme2», если вы хотите второе число.

-

Теперь, когда я ответил на вопрос, я хотел бы предложить, что Скины / Темы могут быть не лучшим способом сделать это. Существуют и другие решения, такие как создание пользовательского элемента управления «Номер телефона», который извлекает номер телефона из основного источника данных или использование файла ресурса.

0 голосов
/ 23 сентября 2009

Насколько я знаю, вы не можете делать это с темами и скинами. Невозможно установить свойства, не связанные с темой Id, Text и т. Д. В классе элемента управления можно установить только те свойства, для которых атрибут ThemeableAttribute имеет значение true.

http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx

...