2011-08-08 42 views
4

私は、ユーザーがサーバーからCSSファイルを選択できるコンテンツ管理システムを作成しています。アプリケーションは、CSSを解析して保存します。アプリケーションは、CSSクラスを解析して記録し、ドロップダウンから別のCSSクラスを選択できる別のページに動的に追加するCSSコンテンツを格納できる必要があります。だから、誰かが、例えばデータベースから、CSSコンテンツをページに動的に追加する方法を知っていますか?私は、CSSを解析するためのいくつかのプロジェクト、hereを見つけました。asp.netでCSSを動的に読み込みますか?

ありがとうございます。

+1

私はもともと、これをZrutyの答えに掲載しましたが、一般的にこの質問に適用されます。あなたのCSSをどうやってまとめるか慎重にしたいのです。おそらく、サイトのすべてのページにCSSファイルを作成する必要はありません。クライアント側のキャッシュを利用する必要があるので、最初にページをヒットするたびに余分なリクエストをする必要はありません – Dlongnecker

答えて

5

CSSファイル:

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

は、その後、ハンドラを作成する(Visual Studioのから「ジェネリックハンドラ」アイテムを追加)し、その中には、データベースまたはどこからCSSを読み込むことができます。

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

CSSのコンテンツを提供していますコントローラ作る:私はあなたのポスト "MVC" タグの付いたのでNullReferenceはあなたのMVCソリューションを与えたと思います

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

<link rel="stylesheet" href="@Url.Action("GetCss", "Serve", new {id="filename"})" /> 

コントローラー・コードを。 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); 
} 

を上記の例ではHtmlLinkの代わりにHtmlGenericコントロールを使用しています。それはまだ同じ手法だ - Page.Header.Controlsコレクションに追加し、Page_Init上:

Webフォームのみのプロジェクトのための良い方法は、静的なのではなく、自分のページに .ashxハンドラにリンクすることです
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