Wie füge ich eine CSS-Klasse zu einem generischen HTML-Steuerelement hinzu?


70

Ich habe ein div-Tag wie folgt erstellt:

System.Web.UI.HtmlControls.HtmlGenericControl dynDiv = 
    new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");

Ich habe dem div-Tag folgenden Stil hinzugefügt:

dynDiv.Style.Add(HtmlTextWriterStyle.BorderStyle, "1px solid #DBE0E4");
dynDiv.Style.Add(HtmlTextWriterStyle.Height, "auto");
dynDiv.Style.Add(HtmlTextWriterStyle.MarginTop, "5px");
dynDiv.Style.Add(HtmlTextWriterStyle.PaddingBottom, "5px");
dynDiv.Style.Add(HtmlTextWriterStyle.Width, "682px");

Aber ich muss den Stil des div-Tags über eine externe CSS-Datei steuern, die sich im Ordner befindet ~/css/maincss.css.

Wie kann ich das CSS in dieser Datei auf dieses Div anwenden?


Fügen Sie dem div-Element eine Klasse oder ID hinzu, und Sie können damit in CSS tun, was Sie möchten.
— Ben Everard

Antworten:


88
dynDiv.Attributes["class"] = "myCssClass";

Dies ist wahr, obwohl die anderen Antworten unten die Klasse berücksichtigen, die bereits in der Liste der Klassen enthalten ist oder nicht.
— GregoryBrad

40

So fügen Sie einem div eine Klasse hinzu, die auf folgende HtmlGenericControlWeise generiert wird :

div1.Attributes.Add("class", "classname"); 

Wenn Sie die PanelOption verwenden, wäre dies:

panel1.CssClass = "classname";

9
technisch ersetzt das die Klasse. Es fügt es nicht hinzu. Sie können dynDiv.Attributes ["class"] + = "myCssClass" verwenden.
— Garr Godfrey

4
@ GarrGodfrey Denken Sie daran, ein Leerzeichen zwischen den Klassen einzufügen.
— TrueWill

11

Wenn Sie einer vorhandenen Liste von Klassen für ein Element eine Klasse hinzufügen möchten:

element.Attributes.Add("class", element.Attributes["class"] + " " + sType);

6

Mein Ansatz wäre:

/// <summary>
/// Appends CSS Class seprated by a space character
/// </summary>
/// <param name="control">Target control</param>
/// <param name="cssClass">CSS class name to append</param>
public static void AppendCss(HtmlGenericControl control, string cssClass)
{
    // Ensure CSS class is definied
    if (string.IsNullOrEmpty(cssClass)) return;

    // Append CSS class
    if (string.IsNullOrEmpty(control.Attributes["class"]))
    {
        // Set our CSS Class as only one
        control.Attributes["class"] = cssClass;
    }
    else
    {
        // Append new CSS class with space as seprator
        control.Attributes["class"] += (" " + cssClass);
    }
}

4

Ich denke, die Antwort von Curt ist jedoch richtig. Was ist, wenn Sie eine Klasse zu einem div hinzufügen möchten, für das bereits eine Klasse im ASP.NET-Code deklariert ist?

Hier ist meine Lösung dafür, es ist eine generische Methode, so dass Sie sie direkt wie folgt aufrufen können:

Asp Net Div Erklärung:

<div id="divButtonWrapper" runat="server" class="text-center smallbutton fixPad">

Code zum Hinzufügen einer Klasse:

divButtonWrapper.AddClassToHtmlControl("nameOfYourCssClass")

Generische Klasse:

public static class HtmlGenericControlExtensions
{
    public static void AddClassToHtmlControl(this HtmlGenericControl htmlGenericControl, string className)
    {
        if (string.IsNullOrWhiteSpace(className))
            return;

        htmlGenericControl
            .Attributes.Add("class", string.Join(" ", htmlGenericControl
            .Attributes["class"]
            .Split(' ')
            .Except(new[] { "", className })
            .Concat(new[] { className })
            .ToArray()));
    }
}

Wo soll ich diese generische Klasse platzieren?
— Dov Miller

1
Sie können einen Util-Ordner Ihrer Webanwendung ablegen.
— Andrés Villenas

Das ist ein Ordner, den ich zu diesem Zweck erstelle?
— Dov Miller

1
Ja, aber theoretisch können Sie es platzieren, wo immer Sie wollen. Es ist nur für Organisationszwecke.
— Andrés Villenas

3

Wenn Sie dies wiederholen, können Sie auch eine Erweiterungsmethode verwenden:

// appends a string class to the html controls class attribute
public static void AddClass(this HtmlControl control, string newClass)
{
    if (control.Attributes["class"].IsNotNullAndNotEmpty())
    {
        control.Attributes["class"] += " " + newClass;
    }
    else
    {
        control.Attributes["class"] = newClass;
    }
}

2

Sie fügen die CSS-Datei nicht zum div hinzu, sondern fügen eine Klasse hinzu und setzen Ihren Import wie folgt oben auf die HTML-Seite:

<link href="../files/external.css" rel="stylesheet" type="text/css" />

Fügen Sie dann Ihrem Code eine Klasse wie die folgende hinzu: 'myStyle'.

Dann machen Sie in der CSS-Datei etwas wie:

.myStyle
{
   border-style: 1px solid #DBE0E4;
}

Und wie bringt man die .myStyleKlasse auf das HTML-Element? Das ist die Frage des OP.
— mbomb007

2

Alternativer Ansatz, wenn Sie einer vorhandenen Liste von Klassen eines Elements eine Klasse hinzufügen möchten:

element.Attributes["class"] += " myCssClass";

1

Wie wäre es mit einer Erweiterungsmethode?

Hier habe ich eine Ein- oder Ausblendmethode. Mit meiner CSS-Klasse versteckt .

public static class HtmlControlExtensions
{
    public static void Hide(this HtmlControl ctrl)
    {
        if (!string.IsNullOrEmpty(ctrl.Attributes["class"]))
        {
            if (!ctrl.Attributes["class"].Contains("hidden"))
                ctrl.Attributes.Add("class", ctrl.Attributes["class"] + " hidden");
        }
        else
        {
            ctrl.Attributes.Add("class", "hidden");
        }
    }

    public static void Show(this HtmlControl ctrl)
    {
        if (!string.IsNullOrEmpty(ctrl.Attributes["class"]))
            if (ctrl.Attributes["class"].Contains("hidden"))
                ctrl.Attributes.Add("class", ctrl.Attributes["class"].Replace("hidden", ""));
    }
}

Wenn Sie dann Ihre Kontrolle ein- oder ausblenden möchten:

myUserControl.Hide();

//... some other code

myUserControl.Show();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.