ASP.net MVC主题更改帮助



我有一个使用ASP.Net MVC开发的网站。现在我想根据请求(根据国家)我想更改网站主题。

例如:美国-主题1加拿大-主题2

如果请求与我想要显示的任何主题(我的当前主题)都不匹配。

我如何动态地实现这一点。

我需要再次重写css吗?或者有更好的方法吗?

请分享你的想法

提前感谢:)

您应该为常见样式定义一个全局css文件。假设您有某种访问当前国家/地区的辅助方法,您可以有条件地加载特定于国家/地区(country)的样式表,或者根据规则加载样式表,例如与国家/地区同名的样式表(以下代码未经测试):

<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中,并根据当前国家/地区设置布局。

不确定这是否是最好的方法,但这就是我正在做的。我有一个类似的文件夹结构:

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

然后我使用Helper Extensions返回正确的路径,例如图像:

<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;
}

主题文件夹中的图像与默认文件夹中的名称相同。样式表也是如此。

最新更新