2009-09-22 9 views
2

Existe-t-il un moyen d'appliquer un habillage uniquement aux contrôles d'un certain type et d'un ID spécifique? Par exemple, je contrôle tout au long d'un site utilisé pour afficher notre numéro de téléphone de la société qui ressemble à ceci:Thèmes de thème ASP.NET

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

Je me demande si je peux définir le thème programme et utiliser une peau pour ce thème pour définir le texte propriété de l'étiquette.

Je sais que je peux le faire

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

mais qui définira le texte de toutes les étiquettes sur le site. Je veux seulement définir le texte pour les étiquettes avec un ID de PhoneLabel.

Je suis également conscient de la propriété SkinID mais cela semble lier mon contrôle à une peau spécifique et ne me permettra pas de changer le texte du numéro de téléphone en appliquant un autre thème.

Est-il simplement impossible de faire cela avec des thèmes/skins?

Répondre

1

Oui, il est possible de définir le texte en utilisant les fichiers de la peau et d'avoir un texte différent dans les différents thèmes. Imaginons que vous ayez deux thèmes dans votre projet: "Thème1" et "Thème2". Dans chaque thème, vous avez un fichier appelé "Default.skin".

Dans votre Theme1/Default.skin fichier que vous définissez

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

Dans votre fichier Theme2/Default.skin vous définissez

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

Dans votre fichier ASPX vous définissez

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

Soit dans votre page web.config ou aspx vous définissez le styleSheetTheme sur le "Theme1" si vous voulez le premier nombre et "Thème 2 "si vous voulez le deuxième nombre.

-

Maintenant que j'ai répondu à la question, je voudrais suggérer que Skins/Thèmes pourraient ne pas être la meilleure façon de le faire. Il existe d'autres solutions telles que la création d'un contrôle de numéro de téléphone personnalisé qui extrait le numéro de téléphone d'une source de données sous-jacente ou à l'aide d'un fichier de ressources.

0

Vous ne pouvez pas faire cela avec des thèmes et des skins autant que je sache. Les propriétés qui ne sont pas associées à un thème, Id, Texte et etc. ne peuvent pas être définies. Vous pouvez définir uniquement les propriétés dont l'attribut ThemeableAttribute est défini sur true dans la classe de contrôle.

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

3

Si vous voulez simplement afficher le numéro de téléphone (et que vous voulez être en mesure de changer le monde), les deux approches suivantes pourraient être plus facile:


Lire le numéro de téléphone de la web.config fichier, par exemple:

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

et de mettre le numéro de téléphone dans la section appSettings de votre site Web.config:

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

dérivez une classe de l'étiquette, et à l'intérieur de cette classe définir la propriété Text au numéro de téléphone (soit codé en dur, ou la lecture de configuration, etc.). Ensuite, chaque fois que vous voulez afficher le numéro de téléphone, utilisez ce contrôle au lieu de la commande standard d'étiquette, par exemple:

mettre cela en App_Code:

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

ensuite utiliser cette commande pour afficher le numéro de téléphone:

<%@ Register Assembly="App_Code" Namespace="MyControls" TagPrefix="my" %> 
.... 
<my:PhoneNumberLabel runat="server"></my:PhoneNumberLabel>