トップ回答者
web.configで設定したテーマを特定のページだけテーマの適用を除外する方法

質問
-
初めて質問させていただきます。VisualStudio2005でC#を使ってWebサイトをつくっています。
現在、Defaultというフォルダにスタイルシートとスキンファイルを格納し、web.configで
<system.web>
<pages theme="Default" styleSheetTheme="Default" autoEventWireup="false" />
</system.web>
と設定しWebサイト全体にテーマを適用しています。
ある特定のページだけテーマを除外したいので、そのページの@Pageディレクティブ属性のところで<@Page EnableTheming="false">としたのですが、テーマは適用されたままです。(方法 : ASP.NET のテーマを無効にする を参考にしました)
また、(方法 : ASP.NET のテーマを適用する )を参考にしてlocation属性を追加し、そのページだけ別の設定をしてみましたがそれでもテーマが適用されたままでした。
web.configで設定した場合はWebサイト内全てのaspxに対してテーマが適用されてしまうものなのでしょうか。
回答
すべての返信
-
以下のような設定で試してみました。
<configuration>
<system.web>
<pages theme="Default" />
</system.web>
<location path ="Default2.aspx">
<system.web>
<pages theme="" />
</system.web>
</location>
</configuration>この場合、Default2.aspxのみテーマの適用がなく、Default.aspxやDefault3.aspxはテーマが適用されることが確認できました。
確認につかったテーマは、cssファイルで背景色を設定する、というだけのものです。 -
どっとねっとふぁん様
ご返答ありがとうございました!
早速、web.configをご返答していただいたように設定したら、locationを用いた方法で特定のページだけテーマの適用を除外できました。本当にどうもありがとうございました!!
ところで、再度質問となってしまい大変恐縮なのですが、初めの方に書いた方法で、
locationを使わずにweb.configで全体のテーマを設定した後、
@Pageディレクティブで<@Page EnableTheming=false>と設定することで、特定のページに対して
「テーマを適用しない」ように設定できるというふうに、(方法 : ASP.NET のテーマを無効にする)にはあるのですが、EnableTheming=falseとしても、テーマが設定されて表示されてしまいます。
うまくいく方法をご存知でしたらどなたか教えていただけますでしょうかm(_ _)m
-
ちょっと参考になりそうな情報がありました。
http://www.microsoft.com/japan/msdn/thisweek/300x10/Phase3/ASP2_Theme/
この最後で、StyleSheetThemeとThemeの違いは適用順にある、という話が述べられています。
ここから考えるとSkinについては、・StyleSheetThemeとコントロールのプロパティだとコントロールのプロパティが優先される。
したがって、StyleSheetThemeを適用したくないページでは個々のコントロールにプロパティ設定を行えばよい。
・ThemeとコントロールのプロパティだとThemeが優先される。
これを抑制する方法はないのでEnableThemingを利用することでskinの適用を抑える。というような考え方があるのではないでしょうか。
また、cssについては、cssファイルの記述より個々のタグに書いた設定が優先されます。
そのため、上記と同じような考え方のもとに、テーマのcssを適用したくないページでは個々のタグに設定を記述する、というようになっていると思われます。これらは推測でしかないですが、こんな状態なので、EnableTheming=falseはskinについてのみ有効なのかなぁ、と思います。
-
ThemeとStyleSheetThemeを同時に指定した場合、Themeが優先されます。この状態で、EnableThemingをfalseにすると、StyleSheetThemeだけが残りますので、結果的にStyleSheetThemeが適用されることになります。
なので、web.configで定義しているStyleSheetThemeを削除すればうまくいくと思います。
また、もう一つの方法としてwebページでTheme=""にしてしまえば、空のテーマが適用されるため(ThemeがStyleSheetThemeより優先度が高いことを思い出してください)、結果的にStyleSheetThemeの指定が無視されてうまくいくと思います。
以上、実験もしないで書いてますが・・・(^^;