2011-06-28 14 views
0

私はASP.Net MVCを使用して開発されたWebサイトを持っています。今、私は(国に基づいて)ウェブサイトのテーマを変更したいという要求に基づいています。ASP.net MVCテーマの変更ヘルプ

例:米国のために - カナダのテーマ1 - テーマ2

要求は、私は、デフォルト(私の現在のテーマ)を表示したい任意のテーマに一致していない場合。

これをどのように動的に達成できますか。

私のCSSをもう一度書き直す必要がありますか、それとも良い方法がありますか?

事前に

おかげで、あなたのアイデアを共有してください:)

+1

なぜなら、国以外の特定のスタイルを保持する共通のCSSファイルを持っているだけではないのです。国を検出すると、英国の国コードが英国であるとし、特定のgb.cssをインポートして、ベースCSSの上に適用します。 – carpii

+0

実際に私のサイトのレイアウトは変更されません。私はイメージのテーマを変更することができます変更することができます。ですから、イメージフォルダ(theme1、theme2など)を作成してから、これらのイメージをロードできますか?しかし、CSSを動的に変更することは可能ですか?例:私はCSSファイルで書かれた変更イメージパスを持っています –

答えて

1

あなたは一般的なスタイルのためのグローバルCSSファイルを定義する必要があります。現在の国にアクセスするための何らかのヘルパーメソッドがあると仮定すると、国固有のスタイルシートを条件付きでロードするか、ルールに基づいてスタイルシートをロードすることができます。国と同じ名前のスタイルシート(次のコードは未検証です):

<link rel="stylesheet" type="text/css" href="css/global.css"> 

// conditional 

@if (SiteHelper.CurrentCountry == "USA") { 
    <link rel="stylesheet" type="text/css" href="css/usa.css"> 
} 

// or assume a css file exists with the country name 

<link rel="stylesheet" type="text/css" href="css/@(SiteHelper.CurrentCountry).css"> 

は、私は一般的に、それはあなたに多くのより多くの制御を与えるよう、各国/テーマの異なるレイアウトのページを使用することをお勧めします。基本的に上記のロジックを_ViewStart.cshtmlに移動し、現在の国に基づいてレイアウトを設定します。

0

これが最善のアプローチかどうかはわかりませんが、これは私がやっていることです。私はこれに似たフォルダ構造があります。

/Content 
    layout.css 
    /Content/Images 
    /Content/Themes/ThemeUSA 
        layout.css 
    /Content/Themes/ThemeUSA/Images 

をそれから私は、画像のために例えば正しいパスを返すために、ヘルパー拡張機能を使用します。

<img src="@Url.Image(Model.EnhImg)" alt="@Model.EnhImgAlt" /> 

public static string Image(this UrlHelper helper, string fileName) 
{ 
    string sLocation = Content() + "images/" + fileName; 
    return helper.Content(sLocation); 
} 

private static string Content() 
{ 
    string sLocation = "~/content/"; 
    string sTheme = (string)HttpContext.Current.Session["Theme"]; 
    if (!String.IsNullOrEmpty(sTheme)) 
    { 
     sLocation += "themes/" +sTheme + "/"; 
    } 
    return sLocation; 
} 

イメージでテーマフォルダはデフォルトフォルダと同じ名前です。スタイルシートでも同じです。

関連する問題