Asp.net mvc 3 创建MVC3站点主题设计

Asp.net mvc 3 创建MVC3站点主题设计,asp.net-mvc-3,themes,Asp.net Mvc 3,Themes,我有一个MVC3Web应用程序,我想为它实现一个主题/模板框架(类似于Wordpress或Joomla,您可以在其中为一个站点启用或禁用不同的主题),并想找出实现这一点的最佳方法 我的设计限制是这样的。我从Themeforest或TemplateMonster之类的地方购买HTML模板,并希望在我的web应用程序中使用这些模板。您通常在网上购买的模板都有非常不同的CSS布局框架,因此不可能只在/Content/Themes/文件夹中添加一个新的CSS,然后视图就可以使用它,因为您还必须更改视图中

我有一个MVC3Web应用程序,我想为它实现一个主题/模板框架(类似于Wordpress或Joomla,您可以在其中为一个站点启用或禁用不同的主题),并想找出实现这一点的最佳方法

我的设计限制是这样的。我从Themeforest或TemplateMonster之类的地方购买HTML模板,并希望在我的web应用程序中使用这些模板。您通常在网上购买的模板都有非常不同的CSS布局框架,因此不可能只在/Content/Themes/文件夹中添加一个新的CSS,然后视图就可以使用它,因为您还必须更改视图中的HTML。因此,对于/Content/Themes中的每个新主题,我还需要一组新的/Views/folders,在这些文件夹中更新HTML,以便为该主题使用适当的CSS类

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

所以我想知道是否有办法告诉MVC当前默认视图文件夹在哪里?我想到的一个可能的项目结构如下:

/Themes/Theme1/Views/(此主题的所有cshtml视图页面都在此处) /主题/主题2/视图/(等)

我知道我可以强迫大家这样做

return View("~/Themes/Theme1/Views/Controller/Index.cshtml")
它可以通过如下方式进行扩展以动态确定主题文件夹

return View(currentThemeFolder + "/Views/Controller/Index.cshtml")
但我想知道是否有更好的方法?在global.asax中是否有某种方法可以设置默认的“Views”文件夹,从而不必执行上述操作?视图必须有一个入口点,因为接下来如何指定调用哪个_viewstart.cshtml文件?如果我采用上述强制/半硬编码的设计,那么视图的缺点是什么


我还想说,我没有太多地研究MVC 3中的领域,我认为这在这里不起作用,因为我的理解是,这会影响您的路由,并且还会复制我不想要的模型和控制器文件夹。我有关于中心模型和控制器的文件夹,但只需要多个视图文件夹。

您可以扩展VirtualPathProviderViewEngine来创建自己的主题视图引擎。以下是如何: