【问题标题】:Dynamically generate CSS file from database in ASP.NET MVC在 ASP.NET MVC 中从数据库动态生成 CSS 文件
【发布时间】:2011-03-18 04:37:39
【问题描述】:

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

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

【问题讨论】:

    标签: css asp.net-mvc


    【解决方案1】:

    我认为最简单的方法是向控制器添加类似以下操作方法的内容:

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

    【讨论】:

    • 我采纳了你的想法,只是让它更通用一点。此外,您在条目末尾缺少;。非常感谢您的回答,这真的很有帮助。
    • 对不起,我想知道这个链接的 href 中应该显示什么 css 文件名 " rel="stylesheet" type="text/css" />
    • @AlastairPitts 如果使用ContentResult 版本,需要在视图中添加什么才能使用生成的内容?特别是对于使用布局的视图?
    • 这将从 DB 中读取 CSS,但是我们如何先将其保存到 DB 中呢?有什么例子吗?
    猜你喜欢
    • 2013-04-12
    • 2011-12-29
    • 2020-10-22
    • 1970-01-01
    • 2011-09-09
    • 2010-12-18
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多