我正在創建一個內容管理系統,用戶可以從他們的服務器中選擇一個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