我正在寻找一些基本的主题支持我的Web应用程序,用户可以自定义外观的各个部分.这些包括颜色,文字大小,字体,其他基本的东西.我将把它们存储在数据库中,并在每次访问页面时加载它们.
我宁愿做一些可缓存的东西,但是可扩展,所以如果我想添加更多可编辑的样式,那么这不是一个问题.
解决方法
我认为最简单的方法是将如下操作方法添加到控制器中:
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"); } }
现在在您的页面中,您可以这样引用:
<link href="<%: Url.RouteUrl(new { controller= "CssController",action = "GetCss" }) %>" rel="stylesheet" type="text/css" />
OP编辑:我对该方法进行了一些小的改动,但总的前提依然存在.这是我使用的版本:
public class CssController : Controller { public ContentResult GetTheme() { var builder = new StringBuilder(); IDictionary<string,IDictionary<string,string>> css = new Dictionary<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"); } }