网站模块:模板切换
开发网站,我们常常需要切换模板来实现界面风格的变化。在NopCommerce中,Themes模块写得非常复杂。其实通过自定义RazorViewEngine就仅仅修改几个特定的字符串数组就可以实现!
(1)在web.config的appsettings中定义一个模板名的设置
<appSettings>
.......
<add key="TemplateName" value=""/>
</appSettings>
(2)创建自定义RazorViewEngine类
public class TestRazorViewEngine : RazorViewEngine
{
public TestRazorViewEngine(string theme)
{
if (string.IsNullOrEmpty(theme))
{
AreaViewLocationFormats = new[]
{
//themes
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
};
AreaMasterLocationFormats = new[]
{
//themes
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
};
AreaPartialViewLocationFormats = new[]
{
//themes
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
};
ViewLocationFormats = new[]
{
//themes
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
};
MasterLocationFormats = new[]
{
//themes
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
};
PartialViewLocationFormats = new[]
{
//themes
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
};
}
else
{
AreaViewLocationFormats = new[]
{
//themes
"~/Areas/{2}/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
AreaMasterLocationFormats = new[]
{
//themes
"~/Areas/{2}/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
AreaPartialViewLocationFormats = new[]
{
//themes
"~/Areas/{2}/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
ViewLocationFormats = new[]
{
//themes
"~/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
MasterLocationFormats = new[]
{
//themes
"~/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
PartialViewLocationFormats = new[]
{
//themes
"~/Themes/"+theme+"/Views/{1}/{0}.cshtml",
"~/Themes/"+theme+"/Views/Shared/{0}.cshtml",
};
}
FileExtensions = new[] { "cshtml" };
}
}
(3)在网站启动时引用自定义的RazorViewEngine
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
var theme = ConfigurationManager.AppSettings["TemplateName"];
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new TestRazorViewEngine(theme));
.......
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix