2009-09-22 2 views
2

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

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

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

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

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

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

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

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

ответ

1

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

Предположим, у вас есть две темы в вашем проекте: «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», если хотите первый номер и «Тема 2 ", если вы хотите второе число.

-

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

0

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

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

3

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


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

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

и поместите номер телефона в раздел приложений в Интернете.конфигурации:

<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> 

 Смежные вопросы

  • Нет связанных вопросов^_^