c# - runat - css color letra
Agregar clase CSS a un div en código detrás (7)
Tengo un div y estoy tratando de agregarle una clase de CSS en el código pero recibo el siguiente error cuando intento
Property or indexer ''System.Web.UI.HtmlControls.HtmlControl.Style'' cannot be assigned to -- it is read only
Estoy usando el siguiente código:
protected void BTNEvent_Click(object sender, ImageClickEventArgs e)
{
BtnventCss.Style= "hom_but_a";
}
¿Alguien puede ayudarme por favor?
Aquí hay dos métodos de extensión que puede usar. Aseguran que las clases existentes se conservan y no duplican las clases que se agregan.
public static void RemoveCssClass(this WebControl control, String css) {
control.CssClass = String.Join(" ", control.CssClass.Split('' '').Where(x => x != css).ToArray());
}
public static void AddCssClass(this WebControl control, String css) {
control.RemoveCssClass(css);
css += " " + control.CssClass;
control.CssClass = css;
}
Uso: hlCreateNew.AddCssClass("disabled");
Uso: hlCreateNew.RemoveCssClass("disabled");
La propiedad Style obtiene una colección de todas las propiedades de hojas de estilo en cascada (CSS); no puedes configurarlo
Pruebe BtnventCss.CssClass = "hom_but_a";
en lugar.
Supongo que BtnventCss es un WebControl.
Acabo de ver que probablemente estés usando <div runat="server"...
Si es así, puedes intentar:
BtnventCss.Attributes.Add("class", "hom_but_a");
Podrías hacer el asp:panel div asp:panel : lo renderizarán igual y obtendrás una mejor compatibilidad con el servidor.
Para AGREGAR clases a elementos html, vea cómo agregar clases css a html control genérico div? . Hay respuestas similares a las que se dan aquí, pero que muestran cómo agregar clases a los elementos html .
Para un control que no sea ASP.NET, es decir, controles HTML como div, table, td, tr
, etc., primero debe hacer que sean un control del servidor, asignar una ID y luego asignar una propiedad desde el código del servidor:
Página ASPX
<head>
<style type="text/css">
.top_rounded
{
height: 75px;
width: 75px;
border: 2px solid;
border-radius: 5px;
-moz-border-radius: 5px; /* Firefox 3.6 and earlier */
border-color: #9c1c1f;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div runat="server" id="myDiv">This is my div</div>
</form>
</body>
Página CS
myDiv.Attributes.Add("class", "top_rounded");
Y si:
<asp:Button ID="Button1" runat="server" CssClass="test1 test3 test-test" />
Para agregar o eliminar una clase, en lugar de sobrescribir todas las clases con
BtnventCss.CssClass = "hom_but_a"
mantener el HTML correcto:
string classname = "TestClass";
// Add a class
BtnventCss.CssClass = String.Join(" ", Button1
.CssClass
.Split('' '')
.Except(new string[]{"",classname})
.Concat(new string[]{classname})
.ToArray()
);
// Remove a class
BtnventCss.CssClass = String.Join(" ", Button1
.CssClass
.Split('' '')
.Except(new string[]{"",classname})
.ToArray()
);
Esto asegura
- Los nombres de clase originales permanecen.
- No hay nombres de clase dobles
- No hay espacios extra molestos
Especialmente cuando el desarrollo del lado del cliente usa varios nombres de clase en un elemento.
En tu ejemplo, usa
string classname = "TestClass";
// Add a class
Button1.Attributes.Add("class", String.Join(" ", Button1
.Attributes["class"]
.Split('' '')
.Except(new string[]{"",classname})
.Concat(new string[]{classname})
.ToArray()
));
// Remove a class
Button1.Attributes.Add("class", String.Join(" ", Button1
.Attributes["class"]
.Split('' '')
.Except(new string[]{"",classname})
.ToArray()
));
Deberías envolver esto en un método / propiedad;)
<div runat="server">
está asignado a un HtmlGenericControl
. Intenta usar BtnventCss.Attributes.Add("class", "hom_but_a");
Button1.CssClass += " newClass";
Esto no borrará tus clases originales para ese control. Prueba esto, debería funcionar.