2011-06-28 76 views
0

我有一個使用ASP.Net MVC開發的網站。現在我想根據請求(基於國家)我想改變網站的主題。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; 
} 

圖片主題文件夾與默認文件夾中的名稱相同。樣式表同樣適用。