ASP.NET主题皮肤

时间:2009-09-22 20:22:19

标签: asp.net themes skins

有没有办法只将皮肤应用于某种类型和特定ID的控件?例如,我在整个站点中都有控件,用于显示我们公司的电话号码,如下所示:

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

我想知道我是否可以以编程方式设置主题并使用该主题的外观来设置标签的text属性。

我知道我可以做到这一点

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

但是这将为网站上的所有标签设置文本。我只想为ID为PhoneLabel的标签设置文本。

我也知道SkinID属性,但这似乎将我的控件绑定到特定的皮肤,并且不允许我通过应用其他主题来更改电话号码文本。

是不是可以用主题/皮肤做到这一点?

3 个答案:

答案 0 :(得分:3)

如果您只是想显示电话号码(并希望能够全局更改),那么以下两种方法可能会更容易:


从web.config文件中读取电话号码,例如:

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

并将电话号码放入web.config的appSettings部分:

<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 :(得分:1)

是的,可以使用Skin文件设置文本,并在不同的主题中包含不同的文本。

假设您的项目中有两个主题:“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”。

-

现在我已经回答了这个问题,我想建议Skins / Themes可能不是最好的方法。还有其他解决方案,例如制作自定义电话号码控件,从基础数据源或使用资源文件中提取电话号码。

答案 2 :(得分:0)

据我所知,你不能用主题和皮肤做到这一点。不能设置与主题相关的Id,Text等属性。您只能在控件类中设置将ThemeableAttribute属性设置为true的属性。

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