2011-08-08 59 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