Pahi2317 Ответов: 1

Как применить CSS к нажатой кнопке, если в ретрансляторе есть несколько кнопок?


Я использую кнопку в ретрансляторе. потому что в базе данных есть только две записи, поэтому при запуске страницы есть две кнопки. Все, что я хочу, это какую бы кнопку я ни нажал, css должен быть добавлен к этой кнопке, и если я нажал другую кнопку, то css должен быть удален из предыдущей кнопки и должен быть добавлен к нажатой кнопке.

   <asp:Repeater ID="rptrQtyVariant" runat="server" OnItemCommand="rptrQtyVariant_ItemCommand" OnItemDataBound="rptrQtyVariant_ItemDataBound">
<ItemTemplate>                                                              
    <asp:Label ID="lblItemId" Visible="false" runat="server" Text='<%#Eval("ITEM_ID") %>'></asp:Label>
   <asp:Label ID="lblSku" Visible="false" runat="server" Text='<%#Eval("SKU") %>'></asp:Label>                                                                       
    <asp:LinkButton ID="lnkQtyVariant" CssClass="product-variant__btn pdp-btn" OnClick="lnkQtyVariant_Click1" CommandName="ItemQty" runat="server">
     <asp:Label ID="lblQty" runat="server" Text='<%#Eval("ITEM_QTY") %>'></asp:Label><br />
                                                                        </asp:LinkButton>
 </ItemTemplate>
 </asp:Repeater>


Что я уже пробовал:

protected void rptrQtyVariant_ItemCommand(object source, RepeaterCommandEventArgs e)
       {
           if (e.CommandName == "ItemQty")
           {
               LinkButton button = e.Item.FindControl("lnkQtyVariant") as LinkButton;
               button.CssClass = "product-variant__btn pdp-btn";

               if (e.Item.ItemIndex == 0)
               {
                   LinkButton lnk = e.Item.FindControl("lnkQtyVariant") as LinkButton;
                   lnk.CssClass = "product-variant__btn pdp-btn product-variant__btn--active";
               }

               else if (e.Item.ItemIndex == 1)
               {
                   LinkButton lnk = e.Item.FindControl("lnkQtyVariant") as LinkButton;
                   lnk.CssClass = "product-variant__btn pdp-btn product-variant__btn--active";
               }

               else
               {
                   LinkButton lnk = e.Item.FindControl("lnkQtyVariant") as LinkButton;
                   lnk.CssClass = "product-variant__btn pdp-btn";
               }
           }
       }

1 Ответов

Рейтинг:
1

Richard Deeming

Просмотрите элементы в повторителе, найдите кнопку в каждом элементе и установите класс в зависимости от того, является ли элемент контейнером нажатой кнопки.

protected void rptrQtyVariant_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "ItemQty")
    {
        Repeater repeater = (Repeater)sender;
        foreach (RepeaterItem item in repeater.Items)
        {
            LinkButton button = (LinkButton)item.FindControl("lnkQtyVariant");
            
            button.CssClass = (item == e.Item)
                ? "product-variant__btn pdp-btn product-variant__btn--active"
                : "product-variant__btn pdp-btn";
        }
    }
}


CHill60

Ричард - ОП пытается связаться с вами через посредство дальнейших решений

Richard Deeming

Он исчез; вы можете вспомнить, что он сказал?

Pahi2317

мой вопрос заключается в том, что в управлении ретранслятором есть кнопка внутри него. Я только хочу, чтобы первая кнопка была применена с помощью css class...my занимаюсь этим кодом, но что происходит, я вам расскажу...
если есть одна кнопка, то класс css не работает, а если есть две кнопки, то он работает нормально, а если есть три кнопки, то первые две кнопки применяются с классом css, но я хочу, чтобы только первая кнопка была с классом css... мой код
охраняемых недействительными rptrQtyVariant_ItemDataBound(объект отправителя, RepeaterItemEventArgs е)
{
если (электронная.Товар.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Предмет)
{
Ретранслятор ретранслятор = (ретранслятор)отправитель;
по каждому элементу (пункт RepeaterItem в репитер.Предметы)
{
LinkButton btnAddClass = (LinkButton)элемент.FindControl("lnkQtyVariant");
btnAddClass.CssClass = (элемент == е.Пункт)
? "продукт-вариант__БТН прп-БТН товара-вариант__БТН-активные"
: "продукт-вариант__btn pdp-btn продукт-вариант__btn--активный";
}
}
}

Richard Deeming

Это не то, что сказал ваш вопрос.

И код, который вы опубликовали, не имеет никакого смысла - каждый раз, когда элемент привязан к данным, вы проходите через него все элементы, проверяя, является ли это текущим элементом, а затем устанавливая класс button точно таким же значением независимо от этого.

Если вы просто хотите, чтобы класс был применен к первому элементу в списке, то применяйте его только к первому элементу в списке:

if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
    if (e.Item.ItemIndex == 0) // It's the first item
    {
        LinkButton btnAddClass = (LinkButton)e.Item.FindControl("lnkQtyVariant");
        btnAddClass.CssClass = "product-variant__btn pdp-btn product-variant__btn--active";
    }
}

Pahi2317

Спасибо тебе, Ричард!!! это все, чего я хочу...

CHill60

Нет, не могу ... но ОП прислушался к моему совету! :УФ:

M.Dawood519

Ричард Диминг большое спасибо,
Я застрял в этом, еще раз спасибо.