创建MVC 3站点主题设计

时间:2011-07-30 07:07:22

标签: asp.net-mvc-3 themes

我有一个MVC 3 Web应用程序,我想要实现一个主题/模板框架(类似于Wordpress或Joomla,您可以在其中启用或禁用网站的不同主题),并想了解什么是最好的实现这一目标的方法。

我的设计限制是这样的。我从Themeforest或Template Monster等地方购买HTML模板,并希望在我的网络应用程序中使用这些模板。您通常在线购买的模板都有非常不同的CSS布局框架,因此不可能只在您的/ Content / Themes /文件夹中删除新的CSS,然后您的视图就可以使用,因为您还必须对HTML进行更改观点。因此,对于/ Content / Themes中的每个新主题,我还需要一组新的/ Views /文件夹,其中HTML被更新以使用适合该主题的CSS类。

我知道在一个理想的世界中,我应该让所有CSS与我的html视图兼容(即主题切换纯粹基于加载新的CSS),但在这种情况下,这是不可能的。

所以我想知道是否有办法告诉MVC当前默认的Views文件夹在哪里?我正在考虑的一个可能的项目结构是这样的:

  

/ Themes / Theme1 / Views /(此主题的所有cshtml视图页面都在这里)   /主题/ THEME2 /查看/(等)

我知道我可以强制这样的观点

return View("~/Themes/Theme1/Views/Controller/Index.cshtml")

可以扩展为动态确定主题文件夹,如下所示

return View(currentThemeFolder + "/Views/Controller/Index.cshtml")

但我想知道是否有更好的方法来做到这一点?也许在global.asax中有一些设置默认的“Views”文件夹,以便上面没有必要吗?必须有一个入口点,因为你如何指定调用哪个_viewstart.cshtml文件?如果我确实采用上述强迫/“半硬编码”设计的观点,那么它的缺点是什么呢?

我还想说我没看过MVC 3中的区域,我认为这不会起作用,因为我的理解是它会影响你的路由,并且还会复制你的模型和控制器文件夹这是我不想要的。我有中央模型和控制器文件夹,但只需要多个视图文件夹。

1 个答案:

答案 0 :(得分:1)

您可以扩展VirtualPathProviderViewEngine以创建自己的可主题视图引擎。方法如下:http://www.singingeels.com/Articles/Creating_a_Custom_View_Engine_in_ASPNET_MVC.aspx

相关问题