none
web.configで設定したテーマを特定のページだけテーマの適用を除外する方法 RRS feed

  • 質問

  • 初めて質問させていただきます。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に対してテーマが適用されてしまうものなのでしょうか。

     

     

    2006年9月26日 1:46

回答

  • 試してみました。

    web.configでStyleSheetThemeを設定している場合は StyleSheetTheme="" を、またThemeを設定している場合は Theme="" を各ページに設定すると、そのページでのテーマ適用が抑制されました。
    ということで、これが正解、かな。

     

    2006年9月27日 9:29

すべての返信

  • 以下のような設定で試してみました。

    <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ファイルで背景色を設定する、というだけのものです。

    2006年9月26日 4:04
  • どっとねっとふぁん様

    ご返答ありがとうございました!

    早速、web.configをご返答していただいたように設定したら、locationを用いた方法で特定のページだけテーマの適用を除外できました。本当にどうもありがとうございました!!

    ところで、再度質問となってしまい大変恐縮なのですが、初めの方に書いた方法で、

    locationを使わずにweb.configで全体のテーマを設定した後、

    @Pageディレクティブで<@Page EnableTheming=false>と設定することで、特定のページに対して

    「テーマを適用しない」ように設定できるというふうに、(方法 : ASP.NET のテーマを無効にする)にはあるのですが、EnableTheming=falseとしても、テーマが設定されて表示されてしまいます。

    うまくいく方法をご存知でしたらどなたか教えていただけますでしょうかm(_ _)m

    2006年9月27日 3:11
  • 手元で試してみたところ、EnableTheming=falseとした場合、skinファイルに記述したコントロールに対するスキンの適用は抑制されるが、cssファイルはそのまま適用される、というようになっているようです。
    また、web.confgでstyleSheetThemeとして設定した場合はスキンの適用も抑制できないようです。

    なにかこのあたりまとまった情報ないかなぁ。。。

    2006年9月27日 5:44
  • ちょっと参考になりそうな情報がありました。

    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についてのみ有効なのかなぁ、と思います。

     

     

    2006年9月27日 6:06
  • ThemeとStyleSheetThemeを同時に指定した場合、Themeが優先されます。この状態で、EnableThemingをfalseにすると、StyleSheetThemeだけが残りますので、結果的にStyleSheetThemeが適用されることになります。

    なので、web.configで定義しているStyleSheetThemeを削除すればうまくいくと思います。

    また、もう一つの方法としてwebページでTheme=""にしてしまえば、空のテーマが適用されるため(ThemeがStyleSheetThemeより優先度が高いことを思い出してください)、結果的にStyleSheetThemeの指定が無視されてうまくいくと思います。

    以上、実験もしないで書いてますが・・・(^^;

    2006年9月27日 8:59
    モデレータ
  • 試してみました。

    web.configでStyleSheetThemeを設定している場合は StyleSheetTheme="" を、またThemeを設定している場合は Theme="" を各ページに設定すると、そのページでのテーマ適用が抑制されました。
    ということで、これが正解、かな。

     

    2006年9月27日 9:29
  • どっとねっとふぁん様 trapemiya様

    回答いただきまして、本当にありがとうございました。m(_ _)m

    私がテーマの適用を除外したかったページは、スタイルシートもテーマも使っておりますので

    「web.configで全体にテーマを指定した後、StyleSheetTheme="" Theme=""」

    の方法にて、特定ページでのテーマの適用を抑制されました!!

    本当にどうもありがとうございました。

    2006年10月3日 10:11
  • テーマの適用が抑制できたのはいいのですが、StyleSheetThemeとThemeの両方を設定する必要はないんじゃないでしょうか。
    少なくとも1つのフォルダにcssとskinを含んでいるだけならどちらか片方だけでいいんじゃないかなぁ。。。

     

    2006年10月3日 14:00