2011-08-08 61 views
4

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

在此先感谢。

+1

我最初发布这个上Zruty的答案,但它一般适用于这个问题 - 你会要小心你如何整合你的CSS。您可能不希望为您网站上的每个页面创建一个CSS文件。您应该利用客户端缓存,这样用户在每次首次访问页面时都不必提出额外请求 – Dlongnecker

回答

5

的WebForms的,只有项目一个好的方法是在你的网页链接到.ashx处理程序,而不是静态的CSS文件:

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

然后创建处理(添加从Visual Studio中的“通用处理器”项目),并在其中您可以从数据库或其他地方加载CSS。只要确保你正确设置的内容类型的处理器,从而使浏览器识别响应为有效的样式表:

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

做一个控制器,它提供的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"); 
    } 
} 
+1

我相信这应该起作用。但是你要小心你如何整合你的CSS。您可能不希望为您网站上的每个页面创建一个CSS文件。您应该利用客户端缓存,因此用户无需每次首次打开页面时都提出额外的请求。 – Dlongnecker

+1

这看起来很棒的方式来做它的asp.net mvc,但该项目只有asp.net。 – NullReference

+1

哎呀,我想我昨天晚上工作太多了,而且我到处都看到MVC。 ASP.NET版本将是@minimalis的解决方案。 – Zruty

4

我想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); 
    } 
+0

它看起来并不是原来的海报添加了MVC标签...... – minimalis

+0

嗯,我不知道是谁用MVC标记了它。重要的是,MVC标签已被删除。 :) – spdeveloper