c# css

c# - ¿Cómo agregar css class a html generic control div?



(8)

Creé una etiqueta div como esta:

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

Agregué estilo a la etiqueta div así:

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

Pero necesito controlar el estilo de la etiqueta div a través de un archivo css externo ubicado en la carpeta ~/css/maincss.css .

¿Cómo puedo aplicar el css en ese archivo a este div?


¿Qué tal un método de extensión?

Aquí tengo un método show u ocultar. Usando mi clase de CSS oculta .

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

Luego, cuando quieras mostrar u ocultar tu control:

myUserControl.Hide(); //... some other code myUserControl.Show();


Creo que la respuesta de Curt es correcta, sin embargo, ¿qué ocurre si quieres agregar una clase a un div que ya tiene una clase declarada en el código ASP.NET?

Aquí está mi solución para eso, es un método genérico para que pueda llamarlo directamente así:

Declaración Asp Net Div:

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

Código para agregar clase:

divButtonWrapper.AddClassToHtmlControl("nameOfYourCssClass")

Clase genérica:

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


Mi enfoque sería:

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


No agrega el archivo css al div, le agrega una clase y luego coloca su importación en la parte superior de la página HTML así:

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

A continuación, agregue una clase como la siguiente a su código: ''myStyle''.

Luego, en el archivo CSS, haga algo como:

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


Para agregar una clase a un div que se genera a través de la HtmlGenericControl , puede usar:

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

Si está utilizando la opción del Panel , sería:

panel1.CssClass = "classname";


Si va a repetir esto, también podría tener un método de extensión:

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


si desea agregar una clase a una lista existente de clases para un elemento:

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


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