ASP.NET MVC 下打造轻量级的 Theme 机制
2012-12-28 23:16
417 查看
上一篇文章[剖析 NopCommerce 的 Theme 机制]介绍了Nop实现Theme的实现原理。但由于Nop要为Admin和Mobile做特殊处理,因此写了太多的其它东西。因此我们决定自己写一个Theme的ViewEngine,仅仅用来实现皮肤功能。
需求分析
考虑到Demo程序,为简单起见,我们将Theme放到Url中,格式:
{Controller}/{Action}?Theme={Theme},当然你完全可以从Cookie或者数据库中去读取用户设置的Theme信息。
其次,Theme文件夹的组织结构,就采用NopCommerce的这种文件夹结构吧。
Themes/{Theme}/Views/…
View Code
我们依葫芦画瓢也写一个WebViewPage。然后在Web.Config做如下配置:
(PS:记得在Theme下的Web.Config中也要做同样的修改)
再次调试:
黑色的背景白色的字,终于出现了。什么这也太丑了吧….
后记
要实现一个好的皮肤机制,除了解决皮肤文件的定位之外,还有很多工作要做。比如要对页面布局有一个精细地设计,对兼容性、扩展性、复用性都有一个全面的考虑。
文中示例源码下载地址:http://files.cnblogs.com/coolite/ThemeDemo.zip
需求分析
考虑到Demo程序,为简单起见,我们将Theme放到Url中,格式:
{Controller}/{Action}?Theme={Theme},当然你完全可以从Cookie或者数据库中去读取用户设置的Theme信息。
其次,Theme文件夹的组织结构,就采用NopCommerce的这种文件夹结构吧。
Themes/{Theme}/Views/…
View Code
public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> { public override string Layout { get { var layout = base.Layout; if (!string.IsNullOrEmpty(layout)) { var filename = System.IO.Path.GetFileNameWithoutExtension(layout); ViewEngineResult viewResult = System.Web.Mvc.ViewEngines.Engines.FindView(ViewContext.Controller.ControllerContext, filename, ""); if (viewResult.View != null && viewResult.View is RazorView) { layout = (viewResult.View as RazorView).ViewPath; } } return layout; } set { base.Layout = value; } } }
我们依葫芦画瓢也写一个WebViewPage。然后在Web.Config做如下配置:
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="ThemeDemo.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor>
(PS:记得在Theme下的Web.Config中也要做同样的修改)
再次调试:
黑色的背景白色的字,终于出现了。什么这也太丑了吧….
后记
要实现一个好的皮肤机制,除了解决皮肤文件的定位之外,还有很多工作要做。比如要对页面布局有一个精细地设计,对兼容性、扩展性、复用性都有一个全面的考虑。
文中示例源码下载地址:http://files.cnblogs.com/coolite/ThemeDemo.zip
相关文章推荐
- ASP.NET MVC 下打造轻量级的 Theme 机制
- Asp.net Mvc+MongoDB+Autofac等打造轻量级blog系统(二)
- Asp.net Mvc+MongoDB+Autofac等打造轻量级blog系统(一)
- ASP.NET MVC的Model元数据提供机制的实现
- 理解ASP.NET MVC底层运行机制
- [转]ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
- asp.net MVC 路由机制 Route
- ASP.NET MVC Controller异步机制
- asp.net MVC 路由机制
- ASP.Net请求处理机制(5)【ASP.Net MVC请求处理流程】
- ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)
- ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)
- 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照
- 理解ASP.NET MVC(2):URL Routing机制:RouteTable
- ASP.NET MVC中的TempData机制
- ASP.NET MVC 扩展之 JsonpResult ,用来提供轻量级跨域调用服务
- ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
- [新手上路] 使用ASP.NET MVC 4 Async Action + jQuery 实现消息通知机制
- ASP.NET MVC 计划任务(不使用外接程序,.net内部机制实现)