我希望为我的Web应用程序添加一些基本的主题支持,用户可以自定义外观的各个部分.这些包括颜色,文字大小,字体,其他基本的东西.我将这些存储在数据库中,并在每次访问页面时加载它们.
我的问题是,如何根据这些数据库值生成动态CSS文件?
我更喜欢做一些可缓存但可扩展的东西,这样如果我想添加更多可编辑的样式,那就不会有点问题了.
mar*_*ind 21
我认为最简单的方法是将以下操作方法添加到控制器:
public class CssController : Controller {
public ActionResult GetCss() {
StringBuilder sb = new StringBuilder();
Dictionary<string, string> cssValues = new Dictionary<string, string>();
// populate dictionary with values from your database
sb.AppendLine(".myDivClass {");
foreach (var entry in cssValues) {
sb.AppendLine(entry.Key + ": " + entry.Value);
}
sb.AppendLine("}");
return Content(sb.ToString(), "text/css");
}
}
Run Code Online (Sandbox Code Playgroud)
现在在您的页面中,您可以像这样引用它:
<link href="<%: Url.RouteUrl(new { controller= "CssController", action = "GetCss" }) %>" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)
OP编辑:我对方法做了一些小改动,但总体前提仍然存在.这是我使用的版本:
public class CssController : Controller
{
public ContentResult GetTheme()
{
var builder = new StringBuilder();
IDictionary<string, IDictionary<string, string>> css = new Dictionary<string, IDictionary<string, string>>();
/* Populate css object from the database */
foreach (var selector in css)
{
builder.Append(selector.Key);
builder.Append(" { ");
foreach (var entry in selector.Value)
{
builder.Append(string.Format("{0}: {1}; ", entry.Key, entry.Value));
}
builder.AppendLine("}");
}
return Content(builder.ToString(), "text/css");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5374 次 |
| 最近记录: |