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