I am creating buttons within a repeater like this (simplyfied):
<asp:Repeater runat="server" OnItemDataBound="Repeater_Buttons_ItemDataBound">
<ItemTemplate>
<telerik:RadButton runat="server" CssClass="myButton" ID="MyButton">
<ContentTemplate>
<...>
</ContentTemplate>
</telerik:RadButton>
</ItemTemplate>
</asp:Repeater>
those buttons are styled with :after pseudo to create a colored background swiping in the background of this buttons
.myButton {
...
}
.myButton::after {
content: "";
display: block;
width: 45px;
height: 45px;
background-color: var(--myColor);
position: absolute;
left: 0;
top: 0;
transition: 400ms all;
z-index: 1;
}
the result looks like this:
my problem is, I need to change the color of this :after content dynamically based on the item bounded.
I can access the RadButton on ItemDataBound where I tried to change it via the Attributes without success.
protected void Repeater_Buttons_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var currentItem = (e.Item.DataItem as MyItem);
var radButton = (e.Item.FindControl("MyButton") as RadButton);
// whishful function I need:
radButton.After.BackgroundColor = currentItem.BackColor;
// or something like
radButton.Attributes.Add("style:after", $"background-color: {currentItem.BackColor}");
}
}
Also approaches via javascript where unsuccessful. I cannot create diffrente css classes hardcode since any color can be choosen for the different items

IMHO, you don't have to override existing CSS. Your CSS already has
So you need just to change this
--myColorCSS variable. Even without a server call. All on a client.For a fast example, plain JS can do it. Such JS action could be built-in into a click handler.
Or such code could be a part of an EventListener (randomly change
--myColoron each click):UI styling is a client job. Don't overload your server with redundant calls.