2011-08-08 3 views
4

Je crée un système de gestion de contenu où un utilisateur peut sélectionner un fichier css à partir de son serveur et l'application va analyser et stocker le CSS. L'application devra être capable d'analyser les classes css, de les enregistrer et de stocker le contenu CSS de manière dynamique pour l'ajouter à une autre page où un utilisateur peut sélectionner les différentes classes css à partir d'une liste déroulante. Est-ce que quelqu'un connaît un moyen d'ajouter dynamiquement du contenu CSS à une page, par exemple à partir d'une base de données? J'ai trouvé quelques projets pour analyser le CSS, here.Charger dynamiquement css dans asp.net?

Merci d'avance.

+1

Je posté à l'origine ceci sur la réponse de Zruty, mais il applique à cette question en général - Vous aurez voulez faire attention à la façon dont vous coupez votre CSS. Vous ne voulez probablement pas créer un fichier CSS pour chaque page de votre site. Vous devriez faire usage de la mise en cache côté client, de sorte que l'utilisateur n'a pas à faire une demande supplémentaire à chaque fois qu'il frappe une page pour la première fois – Dlongnecker

Répondre

5

Une bonne approche pour un projet WebForms-seulement est de créer un lien vers un gestionnaire .ashx dans votre page au lieu d'une statique fichier CSS:

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

Ensuite, créez le gestionnaire (ajouter un élément « gestionnaire générique » à partir de Visual studio) et en son sein, vous pouvez charger le CSS à partir d'une base de données ou chaque fois. Assurez-vous de définir le type de contenu correctement dans le gestionnaire, de sorte que les navigateurs reconnaissent la réponse comme une feuille de style valide:

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

Faire un contrôleur qui sert le contenu CSS:

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

Code Controller:

public class ServeController: Controller 
{ 
    public ContentResult GetCss(string id) 
    { 
     string cssBody = GetCssBodyFromDatabase(id); 
     return Content(cssBody, "text/css"); 
    } 
} 
+1

Cela devrait fonctionner, je crois. Mais vous devez faire attention à la façon dont vous coupez votre CSS. Vous ne voulez probablement pas créer un fichier CSS pour chaque page de votre site. Vous devriez utiliser la mise en cache côté client, afin que l'utilisateur n'ait pas à faire une demande supplémentaire chaque fois qu'il frappe une page pour la première fois. – Dlongnecker

+1

Cela ressemble à un excellent moyen de le faire asp.net mvc, mais le projet est seulement asp.net. – NullReference

+1

Oups, je pense que j'ai trop travaillé hier soir, et je voyais MVC partout. La version ASP.NET sera la solution de @minimalis. – Zruty

4

Je pense que NullReference vous a donné une solution MVC parce que vous avez marqué votre message "mvc". Si vous utilisez des formulaires Web ASP.NET, vous pouvez utiliser la même technique que celle utilisée lors de la génération de liens CSS à la volée sur les contrôles utilisateur. Sur l'événement Page_Init de la page, faire quelque chose comme ce qui suit (dans l'exemple ci-dessous, je suis un lien vers 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); 
} 

Si vous voulez des éléments réels à rendre sur l'en-tête, puis utilisez HtmlGeneric contrôle au lieu de HtmlLink dans mon exemple ci-dessus. Il est toujours la même technique - sur Page_Init, ajouter à la collection 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

On dirait que ce n'était pas l'affiche originale qui a ajouté l'étiquette MVC ... – minimalis

+0

Eh bien, je ne savais pas qui l'a tagué avec MVC. L'important est que la balise MVC a été supprimée. :) – spdeveloper

Questions connexes