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?

Beeshma
quelle
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";
Curt
quelle
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";
jadarnel27
quelle
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);
Fabio Napodano
quelle
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);
    }
}
Amit Bhagat
quelle
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()));
    }
}
Andrés Villenas
quelle
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;
    }
}
Ben Sewards
quelle
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;
}
Chris
quelle
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";
Rithin Chalumuri
quelle
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();
GregoryBrad
quelle