网站模块:模板切换

  开发网站,我们常常需要切换模板来实现界面风格的变化。在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));

.......

}


}

 

posted @   吾心依旧  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示