在ASP.NET MVC中从数据库动态生成CSS文件

时间:2010-07-19 23:56:34

标签: css asp.net-mvc

我希望为我的Web应用程序添加一些基本主题支持,用户可以自定义外观的各个部分。这些包括颜色,文字大小,字体,其他基本的东西。我将这些存储在数据库中,并在每次访问页面时加载它们。

我的问题是,如何根据这些数据库值生成动态CSS文件?

我更喜欢做一些可缓存但可扩展的东西,这样如果我想添加更多可编辑的样式,那就不会有点问题了。

1 个答案:

答案 0 :(得分:20)

我认为最简单的方法是将以下操作方法添加到控制器中:

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, 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");
    }
}