2

ASP.NET 3.5 で ServerControl を作成し、CssClass を公開しているので、ユーザーはコントロールの外観を操作できます。私の問題は、ユーザーがデフォルトを変更したい場合を除き、CSS を構成する必要がないように、合理的なデフォルトを確立したいということです。

私の特定の問題は、コントロールが背景画像を表示する必要がある html div を出力していることです。ユーザーが CSS で別の画像を指定できるようにしたいのですが、デフォルトの背景画像を表示したいのですが、うまくいきません。

サーバー コントロール全体が div として出力され、クラス名はユーザーが CssClass で指定した値に設定されます。背景画像を必要とする div は、この外側の div 内に独自のクラス名で囲まれています。現在、コントロールを含むページの CSS で背景画像を設定しています。

   <style type="text/css">
      .cssClass .innerDiv {
         background-image: url("http://....");
      }
   </style>

これで適切な画像が描画されます。しかし、そこにない場合、画像は描画されません。

私が望むのは、ServerControl がこれらの画像の URL を定義する CSS を発行し、ユーザーが追加した任意の CSS によって上書きされ、そのデフォルトの CSS が ServerControl のアセンブリに埋め込まれた画像への URL を含めることです。

そして、私はどちらかを行う方法がわかりません。さらに言えば、これが最善のアプローチであるとは確信していません。

何か案は?

4

1 に答える 1

1

複数のスタイルが必要な場合は、HeaderCssClass、ItemCssClassなどのCSSクラスでさまざまなプロパティを公開します。

また、ユーザーがCSSクラス名を指定している場合は、それを使用していることを確認できます。それ以外の場合は、デフォルトを使用し、コントロールからカスタムCSSを省略します。

レンダリングロジックでは、ユーザーが何かを指定したかどうかに応じて、DIVの属性として適切なCSSクラス名をレンダリングできます。だからあなたはすることができます:

if (this.HeaderCssClass != null)
   writer.AddAttribute("class", this.HeaderCssClass);
else
   writer.AddAttribute("class", "standard");

writer.RenderBeginTag("div");

また、HeaderCssClassがnullの場合にのみ、標準のCSSを書き出します。

于 2010-03-29T19:34:11.973 に答える