我有一个使用 ASP.Net MVC 开发的网站。现在我想根据请求(基于国家)更改网站主题。
例如:对于美国 - 主题 1 对于加拿大 - 主题 2
如果请求与我想显示的任何主题都不匹配(我当前的主题)。
我怎样才能动态地实现这一点。
我需要再次重写我的css还是有更好的方法?
请分享你的想法
提前致谢 :)
我有一个使用 ASP.Net MVC 开发的网站。现在我想根据请求(基于国家)更改网站主题。
例如:对于美国 - 主题 1 对于加拿大 - 主题 2
如果请求与我想显示的任何主题都不匹配(我当前的主题)。
我怎样才能动态地实现这一点。
我需要再次重写我的css还是有更好的方法?
请分享你的想法
提前致谢 :)
您应该为通用样式定义一个全局 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 并根据当前国家/地区设置布局。
不确定这是否是最好的方法,但这就是我正在做的。我有一个类似于这样的文件夹结构:
/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;
}
主题文件夹中的图像与默认文件夹中的名称相同。样式表也是如此。