web-dev-qa-db-ja.com

インラインCSSをASP.NETサーバーコントロールに適用する

私が実行した簡単なテストに基づくと、ASP.NETサーバーコントロールにインラインの<style>タグを配置することは不可能だと思います。スタイルは出力HTMLにレンダリングされませんでした。たとえそれが可能であったとしても、これを行うのは悪い習慣だと確信しています。

これを行うことは可能ですか?適用するCSSクラスが1つか2つしかないクイックプロトタイプに役立つことがわかります。

更新:

ジョナサンのリクエストにより、私はコードを投稿するつもりでした。しかし、プロジェクトを開いてページを再度ロードすると(キックのためだけに)、正しく実行されました。私の推測では、ページの実行時にVisualStudioが起動するASP.NET開発サーバーの再起動と関係があると思います。

いずれにせよ、ページに同一の複数のコントロールを含めると、複数の同一のスタイルも取得しました。これはおそらく、これを行うことが悪いことである理由の説明になるでしょう。とにかく、タスクを実行するためのベストプラクティスと代替方法を知ることは常に良いことなので、私は皆の回答に感謝します。

13
Jason Z

www.w3schools.com によると:

スタイル要素はヘッドセクションに入ります。ページにスタイルシートを含める場合は、スタイルシートを外部で定義し、<link>を使用してスタイルシートにリンクする必要があります。

したがって、コントロールにスタイル要素(<style type="text\css"></style>ブロックなど)を含めることはお勧めできません。可能であれば、一部のブラウザでは効果があると思われますが、検証されないため、悪い習慣です。

スタイルを要素にインラインで適用する場合は、次のいずれかが機能します。

C#

myControl.Attributes["style"] = "color:red";

myControl.Attributes.Add("style", "color:red");

VB.NET

myControl.Attributes("style") = "color:red";

myControl.Attributes.Add("style", "color:red");

ただし、これにより、style属性に設定されている既存のスタイルが置き換えられることに注意してください。これは、コード内の複数の場所でスタイルを設定しようとすると問題になる可能性があるため、注意が必要です。

複数のスタイル宣言をグループ化し、冗長性とページの肥大化を回避できるため、CSSクラスを使用することをお勧めします。 WebControl から派生したすべてのコントロールには、使用できる CssClass プロパティがありますが、他の場所に適用されている既存のクラスを上書きしないように注意してください。

13
Tom Robinson

Intellisenseはヒントを提供しませんが、これを行うことができます。

<asp:Label ID="Label1" runat="server" Text="Label" style="color:Red;"></asp:Label>
47
NakedBrunch

Attributes ["style"]を使用すると、呼び出すたびにスタイルが上書きされます。これは、コードの2つの異なるセクションで呼び出しを行う場合に問題になる可能性があります。また、フレームワークには、インラインスタイルとしても適用される境界線や色などの基本設定のプロパティが含まれているため、問題になる可能性があります。次に例を示します。

// wrong: first style will be overwritten
myControl.Attributes["style"] = "text-align:center";
// in some other section of code
myControl.Attributes["style"] = "width:100%";

うまくプレイするには、代わりに次のようなスタイルを設定します。

// correct: both style settings are applied
myControl.Attributes.CssStyle.Add("text-align", "center");
// in some other section of code
myControl.Attributes.CssStyle.Add("width", "100%");
7
Hutch

HTMLにレンダリングするには、サーバーコントロールの属性として追加する必要があると思います。

つまり、基本的に(C#で)、

ControlName.Attributes["style"] = "color:red";
1
Vaibhav