我正在创建一个内容管理系统,用户可以从他们的服务器中选择一个css文件,应用程序将解析和存储css。应用程序需要能够解析出css类,记录它们,并将css内容存储为动态添加到另一个页面,用户可以从下拉列表中选择不同的css类。那么是否有人知道如何将css内容动态添加到页面,例如从数据库中添加?我发现了一些解析css的项目,here。在asp.net中动态加载css?
在此先感谢。
我正在创建一个内容管理系统,用户可以从他们的服务器中选择一个css文件,应用程序将解析和存储css。应用程序需要能够解析出css类,记录它们,并将css内容存储为动态添加到另一个页面,用户可以从下拉列表中选择不同的css类。那么是否有人知道如何将css内容动态添加到页面,例如从数据库中添加?我发现了一些解析css的项目,here。在asp.net中动态加载css?
在此先感谢。
的WebForms的,只有项目一个好的方法是在你的网页链接到.ashx
处理程序,而不是静态的CSS文件:
<link rel="stylesheet" type="text/css" href="DynamicStyles.ashx" />
然后创建处理(添加从Visual Studio中的“通用处理器”项目),并在其中您可以从数据库或其他地方加载CSS。只要确保你正确设置的内容类型的处理器,从而使浏览器识别响应为有效的样式表:
context.Response.ContentType = "text/css";
做一个控制器,它提供的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文件。您应该利用客户端缓存,因此用户无需每次首次打开页面时都提出额外的请求。 – Dlongnecker
这看起来很棒的方式来做它的asp.net mvc,但该项目只有asp.net。 – NullReference
哎呀,我想我昨天晚上工作太多了,而且我到处都看到MVC。 ASP.NET版本将是@minimalis的解决方案。 – Zruty
我想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标签...... – minimalis
嗯,我不知道是谁用MVC标记了它。重要的是,MVC标签已被删除。 :) – spdeveloper
我最初发布这个上Zruty的答案,但它一般适用于这个问题 - 你会要小心你如何整合你的CSS。您可能不希望为您网站上的每个页面创建一个CSS文件。您应该利用客户端缓存,这样用户在每次首次访问页面时都不必提出额外请求 – Dlongnecker