PreInit イベント (Load イベントも試しました) では、バックエンドの条件に基づいて実行時にカスタム ユーザー コントロールを動的に追加しています。私の問題は、ページに追加されたユーザー コントロールが、サイトに現在設定されているテーマを採用せず、その中のすべてのコントロールに既定のスタイルを使用していることです。
これを修正するにはどうすればよいですか?Google を使用して特に関連性の高いものを見つけるのに苦労しています。
それを行う方法はたくさんあります。
MyControl.Attributes.Add("class", "myclass")
MyControl.Style.Add("background-color", "red")
MyControl.Attributes("bgcolor") = "lightblue"
理解した。私のサイトは、初期ロード時に現在のテーマをセッション変数に保存します。ページにコントロールを動的に追加した後、セッション変数を使用してテーマを再適用します。動的に追加されたコントロールは、適切なテーマを持ちます。
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);
}
}