使用C#动态生成CSS文件

S.K*_*ers 7 css c# asp.net

我有一个网站,可以部署到十几个客户端.主网站有一个基本模板,每个客户端都有一个覆盖颜色的客户端文件夹.问题是有很多CSS文件,因此进行更改会迫使我们更新每个客户端需要很长时间.自动构建过程负责替换更新的文件.

我想将CSS文件更改为usercontrols,然后这些用户控件可以从另一个存储客户端特定值的usercontrol继承.

因此,我没有一个forms.css文件,而是一个/client/forms.css文件,而是有一个Forms.ascx文件,该文件继承自包含颜色的usercontrol.

例如:

<%@ Control Language="C#" ClassName="Forms" %>
<%@ Register TagPrefix="css" TagName="Client" Src="~/css/ClientStyling.ascx" %>

/* CSS Document */
body
{
  color:<%=Client.BodyColor%>
}
Run Code Online (Sandbox Code Playgroud)

然后,母版页将继承自usercontrol.这将使客户端站点的维护更加容易.

这个解决方案是否有效且值得推荐?或者有更好的方法来实现相同的最终结果吗?

如果这是可能的,那么还可以让Forms.ascx控件将标记输出为CSS吗?或者扩展.css并仍然具有ascx属性?

Pre*_*ott 11

您可能最好不要创建Generic Handler而不是Web Control.这不会有Web控件的开销.

  1. 在您的处理程序中,通过查询字符串接受clientID - 这允许您在客户端级别进行缓存
  2. 在.master文件中,您可以链接到它.<link src ="MyCssHandler.ashx?ClientID = <%= ClientID%>">

在你的处理程序中,你有几种方法可以使用CSS.

  1. 只需要为css提供一堆response.write,并输入相关的客户端值
  2. 使用自己的特殊标识符创建外部CSS文件 - 可能<%%>.然后,您可以在NameValuePair集合中加载所有客户端特定的值,然后遍历外部CSS文件,解析<%NAME%>并替换为正确的值.然后response.write这个文件.更复杂但是它允许更多更清洁的CSS文件


小智 7

另一个需要考虑的选择可能就是使用"CSS编译器" - 例如SASS,LESS甚至HSS,它们可能支持像"mixins"这样的方便结构并包含其他文件.这种方法可以允许一个系统,虽然不是动态的,但可以根据不同客户的需求轻松配置.

例如,使用"CSS编译器" ,整个颜色模式可以作为可导出的变量或模板存储在单个文件中(取决于"编译器") - 修改该文件,"重新编译"**和wham,新的颜色方案接口无处不在(SASS还支持颜色数学 - 例如Hue移位).这可能使得使用静态内容的部署/管理足够用于您的目的.

我使用SASS(它符合我的需要/风格,而LESS/HSS没有).我就无法切换回,除非我真的,真的不得不(这是说:呃,从不) -上海社会科学院在SCSS模式也理解CSS语法,所以你可以微进化或混搭(LESS和HSS也像这样工作,但HSS仅适用于更严格的CSS语法子集).CSS编译器也可以结合模板引擎(如TT4)使用,或采取包括动态生成的文件的优势(未动动如问题,而是动态的在这个意义上,他们来自一些其他数据源)如果额外需要力量.

虽然普通的CSS级联和类名/选择器可以有很长的路要走,但我发现分离"逻辑级联"(CSS,其中CSS /级联至关重要)和"geeze,我希望这就像模板一样"更容易(CSS编译器,应该处理滥用CSS /级联的情况).

**SASS和LESS都可以监视文件并自动重新编译它们.SASS甚至允许监控整个目录