如何设置动态添加的控件的样式?

时间:2013-02-26 06:48:02

标签: asp.net .net vb.net

在PreInit事件中(还尝试过Load事件),我根据后端的条件在运行时动态添加自定义用户控件。我的问题是添加到页面的用户控件不会占用网站当前设置的主题,并且正在使用其中所有控件的默认样式。

我该如何解决这个问题?我很难找到使用谷歌特别相关的东西。

3 个答案:

答案 0 :(得分:2)

一堆方法。

MyControl.Attributes.Add("class", "myclass")
MyControl.Style.Add("background-color", "red")
MyControl.Attributes("bgcolor") = "lightblue"

答案 1 :(得分:0)

想出来。我的网站在初始加载时将当前主题保存到会话变量中。在我动态地将控件添加到页面后,我使用会话变量重新应用我的主题。我动态添加的控件然后采用适当的主题。

答案 2 :(得分:0)

尝试尽可能多地将ASP.NET控件与其样式分开。使用CSS类可以轻松完成。您没有发布代码示例,因此我只能猜测您的自定义控件的外观。他们可能有某种形式的容器,如div。确定哪个层将处理CSS类结构,将asp:Literal添加到该标记层,然后将Literal的Text属性公开为控件的公共属性。在运行时,当您创建控件并将控件添加到Controls集合时,您可以为该场景指定正确的类名。

它看起来像这样:

<div class="<asp:Literal ID="uxCssClassLiteral" runat="server" />">
    <p>My content goes here</p>
</div>

从背后的代码

public class MyControlType
{
    public string CssClass 
    {
        get { return this.uxCssClassLiteral.Text; }
        set { this.uxCssClassLiteral.Text = value; }
    }
}

该页面将像这样处理控件:

public class MyPage 
{
    protected void Page_Load(Object sender, EventArgs e)
    {
        MyControlType controlA = new MyControlType();
        if (condition1 == true)
        {
            controlA.CssClass = "class-name-for-condition-1";
        }
        else 
        {
            controlA.CssClass = "class-name-for-other-condition";
        }
        this.Controls.Add(controlA);
    }
}