Asp.net mvc 3 MVC3中的动态主题

Asp.net mvc 3 MVC3中的动态主题,asp.net-mvc-3,Asp.net Mvc 3,我一直在从事一个MVC3新项目,我想介绍动态主题的概念 而不是创建一堆.css文件并动态链接到 对,我想在master部分中使用部分 指定用于选择器及其属性的值 这些值将从数据库中提取并以样式写入标题部分, 像这样: <head> <style type="text/css"> .testClass { color:Purple;background-color:LightGreen; } </style> </head> .testCla

我一直在从事一个MVC3新项目,我想介绍动态主题的概念

而不是创建一堆.css文件并动态链接到 对,我想在master
部分中使用
部分 指定用于选择器及其属性的值

这些值将从数据库中提取并以样式写入标题部分, 像这样:

<head>

<style type="text/css">
.testClass { color:Purple;background-color:LightGreen; }
</style>

</head>

.testClass{颜色:紫色;背景色:浅绿色;}

从本质上讲,这不是一个关于如何实现这一目标的答案,而是一个需要你重新考虑的建议。多年来,我多次亲眼看到这种方法,它总是首先编写一个专用工具来编辑数据库主题,然后进行昂贵的重写,将所有主题从数据库中提取出来,并转换成正确的css文件

在数据库中放置样式的一个典型原因是希望在个案基础上“覆盖”给定的样式-例如,在应用程序服务提供商模型中,一个客户只希望更改一个或两个默认样式。然而,“层叠样式表”中的“层叠”允许这种精确的行为,而不会放弃正确css和相关工具的所有优点-只要您在页面标题中以正确的顺序排列样式表(例如,先“maintheme.css”,然后“customerX.css”),您只需要重新定义客户样式表中感兴趣的样式,它们将自动覆盖主主题样式表中的样式(假设css选择器具有相同的优先级)


使用数据库驱动样式表的一个相关但略有不同的原因是允许最终用户或业务所有者自己编辑样式。除了少数例外,事实证明,这种功能在实践中使用较少,维护起来也比起草时更困难。在这种情况下,被定制的样式的数量在理论上是非常小的——可能是完全受限的——并且您将编写一个专有工具来允许对它们进行编辑,因此我再次建议您只需将定制样式写入文件系统上的css文件,而不是数据库(或者作为CDN的blob,等等).

从本质上讲,这不是一个关于如何实现这一目标的答案,而是一个需要你重新考虑的建议。多年来,我多次亲眼看到这种方法,它总是首先编写一个专用工具来编辑数据库主题,然后进行昂贵的重写,将所有主题从数据库中提取出来,并转换成正确的css文件

在数据库中放置样式的一个典型原因是希望在个案基础上“覆盖”给定的样式-例如,在应用程序服务提供商模型中,一个客户只希望更改一个或两个默认样式。然而,“层叠样式表”中的“层叠”允许这种精确的行为,而不会放弃正确css和相关工具的所有优点-只要您在页面标题中以正确的顺序排列样式表(例如,先“maintheme.css”,然后“customerX.css”),您只需要重新定义客户样式表中感兴趣的样式,它们将自动覆盖主主题样式表中的样式(假设css选择器具有相同的优先级)


使用数据库驱动样式表的一个相关但略有不同的原因是允许最终用户或业务所有者自己编辑样式。除了少数例外,事实证明,这种功能在实践中使用较少,维护起来也比起草时更困难。在这种情况下,被定制的样式的数量在理论上是非常小的——可能是完全受限的——并且您将编写一个专有工具来允许对它们进行编辑,因此我再次建议您只需将定制样式写入文件系统上的css文件,而不是数据库(或者作为CDN的blob,等等).

您是使用Razor语法,还是使用较旧的“web表单”语法和
标记?您是使用Razor语法,还是使用较旧的“web表单”语法和
标记?