在asp.net中动态加载css?

时间:2011-08-08 15:42:00

标签: c# asp.net css

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

提前致谢。

3 个答案:

答案 0 :(得分:10)

制作一个提供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 :(得分:7)

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

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

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

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

答案 2 :(得分: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);
    }