0

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

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

4

3 回答 3

2

一堆方法来做到这一点。

MyControl.Attributes.Add("class", "myclass")
MyControl.Style.Add("background-color", "red")
MyControl.Attributes("bgcolor") = "lightblue"
于 2013-02-26T07:01:45.897 回答
0

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

于 2013-02-26T07:10:47.030 回答
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);
    }
}
于 2013-02-26T07:13:41.003 回答