0

PreInit イベント (Load イベントも試しました) では、バックエンドの条件に基づいて実行時にカスタム ユーザー コントロールを動的に追加しています。私の問題は、ページに追加されたユーザー コントロールが、サイトに現在設定されているテーマを採用せず、その中のすべてのコントロールに既定のスタイルを使用していることです。

これを修正するにはどうすればよいですか?Google を使用して特に関連性の高いものを見つけるのに苦労しています。

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 に答える