【问题标题】:Load css dynamically in asp.net?在asp.net中动态加载css?
【发布时间】:2011-10-22 12:27:50
【问题描述】:

我正在创建一个内容管理系统,用户可以在其中从他们的服务器中选择一个 css 文件,然后应用程序将解析并存储 css。应用程序需要能够解析出 css 类,记录它们,并存储 css 内容以动态添加到另一个页面,用户可以从下拉列表中选择不同的 css 类。那么有没有人知道一种将css内容动态添加到页面的方法,例如从数据库中?我找到了一些解析 css 的项目,here

提前致谢。

【问题讨论】:

  • 我最初在 Zruty 的回答中发布了这个,但它一般适用于这个问题 - 你需要小心如何将你的 CSS 分块。您可能不想为您网站上的每个页面创建一个 CSS 文件。您应该使用客户端缓存,这样用户就不必在每次第一次点击页面时都发出额外的请求

标签: c# asp.net css


【解决方案1】:

对于纯 WebForms 项目的一个好方法是链接到页面中的 .ashx 处理程序,而不是静态 CSS 文件:

<link rel="stylesheet" type="text/css" href="DynamicStyles.ashx" />

然后创建处理程序(从 Visual Studio 添加一个“通用处理程序”项),在其中您可以从数据库或任何地方加载 CSS。只需确保在处理程序中正确设置内容类型,以便浏览器将响应识别为有效样式表:

context.Response.ContentType = "text/css";

【讨论】:

    【解决方案2】:

    我认为 NullReference 为您提供了 MVC 解决方案,因为您将帖子标记为“mvc”。如果您使用的是 ASP.NET Web 表单,则可以使用在用户控件上即时生成 CSS 链接时使用的相同技术。在页面的 Page_Init 事件上,执行以下操作(在下面的示例中,我链接到 jquery-ui-CSS):

    protected void Page_Init(object sender, EventArgs e)
    {
         System.Web.UI.HtmlControls.HtmlLink jqueryUICSS;
         jqueryUICSS = new System.Web.UI.HtmlControls.HtmlLink();
         jqueryUICSS.Href = "styles/jquery-ui-1.8.13.custom.css");
         jqueryUICSS.Attributes.Add("rel", "stylesheet");
         jqueryUICSS.Attributes.Add("type", "text/css");
         Page.Header.Controls.Add(jqueryUICSS);
    }
    

    如果您希望在标题上呈现实际元素,则在上面的示例中使用 HtmlGeneric 控件而不是 HtmlLink。它仍然是相同的技术——在 Page_Init 上,添加到 Page.Header.Controls 集合:

        protected void Page_Init(object sender, EventArgs e)
        {
            System.Web.UI.HtmlControls.HtmlGenericControl mystyles;
            mystyles = new System.Web.UI.HtmlControls.HtmlGenericControl();
            mystyles.TagName = "style";
            string sampleCSS = "body { color: Black; } h1 {font-weight: bold;}";
            mystyles.InnerText = sampleCSS;
            Page.Header.Controls.Add(mystyles);
        }
    

    【讨论】:

    • 好吧,我不知道是谁用 MVC 标记了它。重要的是 MVC 标签已被删除。 :)
    【解决方案3】:

    制作一个提供 CSS 内容的控制器:

    <link rel="stylesheet" href="@Url.Action("GetCss", "Serve", new {id="filename"})" />
    

    控制器代码:

    public class ServeController: Controller
    {
        public ContentResult GetCss(string id)
        {
            string cssBody = GetCssBodyFromDatabase(id);
            return Content(cssBody, "text/css");
        }
    }
    

    【讨论】:

    • 这应该可行,我相信。但是你要小心你如何分块你的 CSS。您可能不想为您网站上的每个页面创建一个 CSS 文件。您应该使用客户端缓存,这样用户就不必在每次第一次点击页面时都发出额外的请求。
    • 这看起来是用 asp.net mvc 做的好方法,但项目只是 asp.net。
    • 哎呀,我觉得我昨天晚上工作太多了,我到处都看到 MVC。 ASP.NET 版本将是@minimalis 的解决方案。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2011-04-14
    • 2020-04-24
    • 2012-08-13
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多