6 Stimmen

Css dynamisch in asp.net laden?

Ich erstelle ein Content-Management-System, bei dem ein Benutzer eine CSS-Datei von seinem Server auswählen kann und die Anwendung die CSS-Datei analysiert und speichert. Die Anwendung muss in der Lage sein, die CSS-Klassen zu analysieren, sie aufzuzeichnen und den CSS-Inhalt zu speichern, um dynamisch zu einer anderen Seite hinzugefügt zu werden, auf der ein Benutzer die verschiedenen CSS-Klassen aus einer Dropdown-Liste auswählen kann. Kennt jemand eine Möglichkeit, CSS-Inhalte dynamisch zu einer Seite hinzuzufügen, zum Beispiel aus einer Datenbank? Ich habe ein paar Projekte zum Parsen von CSS gefunden, ici .

Vielen Dank im Voraus.

10voto

Zruty Punkte 8117

Erstellen Sie einen Controller, der den CSS-Inhalt bereitstellt:

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

Controller-Code:

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

8voto

minimalis Punkte 1603

Ein guter Ansatz für ein reines WebForms-Projekt ist die Verknüpfung mit einer .ashx Handler in Ihrer Seite anstelle einer statischen CSS-Datei:

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

Erstellen Sie dann den Handler (fügen Sie in Visual Studio ein Element "Generic Handler" hinzu) und laden Sie darin das CSS aus einer Datenbank oder von einem anderen Ort. Stellen Sie nur sicher, dass Sie den Inhaltstyp im Handler richtig einstellen, damit die Browser die Antwort als gültiges Stylesheet erkennen:

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

5voto

spdeveloper Punkte 301

Ich denke, NullReference gab Ihnen eine MVC-Lösung, weil Sie Ihren Beitrag mit "mvc" gekennzeichnet haben. Wenn Sie ASP.NET-Webformulare verwenden, können Sie die gleiche Technik verwenden, die beim Generieren von CSS-Links on-the-fly auf Benutzersteuerelementen verwendet wird. Führen Sie im Page_Init-Ereignis der Seite etwas wie das Folgende aus (im Beispiel unten verlinke ich auf 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);
}

Wenn Sie möchten, dass tatsächliche Elemente in der Kopfzeile gerendert werden, dann verwenden Sie HtmlGeneric Kontrolle anstelle von HtmlLink in meinem obigen Beispiel. Es ist immer noch die gleiche Technik - auf Page_Init, fügen Sie der Page.Header.Controls Sammlung:

    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);
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X