0

ゲートウェイページでASP.NETテーマを設定できるようにしたいのですが、これにより、パートナーIDなどに基づいてテーマが決定されます。セッションでテーマ名を貼り付けて、必要に応じてそこから取得すると思います。

このコードを1か所に配置するのに適切な場所を見つけるのに苦労しています。

テーマを設定できるグローバルな場所が見えないようです。ページごとに設定する必要があります。

MSDNで説明されているように、ページのPreInit関数でThemeプロパティを割り当てることができます。

Protected void Page_PreInit(object sender, EventArgs e)
{
    switch (Request.QueryString["theme"])
    {
        case "Blue":
           Page.Theme = "BlueTheme";
            break;

        case "Pink":
           Page.Theme = "PinkTheme";
            break;
    }
}

だから私は大丈夫だと思った-私は私のマスターページでそれをするだけだ。残念ながら、これとまったく同じコードをマスターページにコピーすることはできません。だから私は思った-うーん、マスターページはこのイベントを使用しないかもしれない。これは本当であることがわかります。

私は本当にこのテーマコードをすべてのコンテンツページに配置する必要はありません。それは完全に愚かなようです。しかし、私はまだ別の方法を見つけることができません。MSDNでは、テーマをページに適用する2つの方法(web.configまたはPage.Theme)についてのみ説明しています。

Pageのサブクラスを作成し、すべてのページでそのページをサブクラス化し、そのサブクラスのPreInitをオーバーライドする必要がありますか?MSがすべてのコンテンツページにプログラムでテーマを設定することをMSが本当に期待しているとは思えないので、私は何かが欠けているに違いないと思います。

4

2 に答える 2

3

1 つのオプションは、独自のページ基本クラスを作成し、そこでテーマの切り替え/設定を処理することです。次に、そのクラスをすべてのページの基本クラスとして使用します。

public class PageBase : Page
{
  protected void Page_PreInit(object sender, EventArgs e)
  {
    //..
    Page.Theme = "BlueTheme";
    //..
  }
}


public class MyPageOne : PageBase
{
 ...
}
于 2009-01-20T07:38:04.467 に答える
0

サイトでクリーン マークアップを使用している場合は、クエリ文字列、ブラウザの種類、ログイン情報などに基づいてスタイル シートを簡単に切り替えることができます。

CSS を使用すると、新しいテーマ/マスターページ/マークアップなどを作成するよりも、将来的に多くの時間を節約できます。

于 2009-01-20T08:37:49.307 に答える