0

これが取り引きです。リピーターと彼のデータバインディングによって生成されたドキュメントのリストを取得しました。私のマークアップでは、アクティブかどうかにかかわらず「li」タグのクラスを取得しました。

ドキュメントが選択されているときに、linkbutton の Li 親タグに class="active" を設定するだけです。

    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li>
                <asp:LinkButton ID="lnk" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnCommand="Get_carte"><%# Container.FindControl("lnk").ClientID %> <%# DataBinder.Eval(Container.DataItem, "Name") %>  - <%# DataBinder.Eval(Container.DataItem, "id") %> - <%# DataBinder.Eval(Container.DataItem, "compteur") %></asp:LinkButton></li>
        </ItemTemplate> 
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
4

3 に答える 3

1

私は最終的に私の問題の解決策を見つけました。

@Kapil : コードは機能しますが、aspx ページのリロードで問題が発生したため、このメソッドを使用できません。

@Aghilas:あなたのコードに基づいてソリューションを作成しました。

実際、リピーターを1回だけバインドしてから、リンクボタンでOnCommandイベントを使用するため、ItemDataBoundイベントを使用できません。これが私のaspxコードです:

    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Rpt_DataBound">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                <ItemTemplate>
                    <li runat="server" ID="li">
                        <asp:LinkButton ID="lnk" class="linkButton" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnCommand="Get_carte"><%# Container.FindControl("lnk").ClientID %> <%# DataBinder.Eval(Container.DataItem, "Name") %>  - <%# DataBinder.Eval(Container.DataItem, "id") %> - <%# DataBinder.Eval(Container.DataItem, "compteur") %></asp:LinkButton></li>
                </ItemTemplate> 
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>

そして私の GetCarte メソッド:

    protected void Get_carte(object sender, CommandEventArgs e)
    {
        LinkButton lnk = (LinkButton)sender;
        ViewState["liactive"] = lnk.UniqueID.ToString().Substring(0, lnk.UniqueID.ToString().Length - 4);
        lbl_carte.Text = lnk.UniqueID + " " + e.CommandArgument.ToString();
        foreach (RepeaterItem rI in Repeater1.Items)
        {
            if (rI.ItemType == ListItemType.Item || rI.ItemType == ListItemType.AlternatingItem)
            {
                string liactiv = "";
                if (ViewState["liactive"] != null)
                    liactiv = ViewState["liactive"].ToString();
                var li = (HtmlControl)rI.FindControl("li");
                if (li.UniqueID.ToString().Substring(0, li.UniqueID.ToString().Length - 3) == liactiv) //Adjust your condition
                    li.Attributes.Add("class", "active");
                else
                    li.Attributes.Remove("class");
            }
        }

    }

ご協力いただきありがとうございます。

PS: コードの別の部分で値が必要な場合に備えて、ID を ViewState に入れます。また、部分文字列を lastindexof メソッドで置き換えることもできます。

于 2012-09-20T08:18:30.620 に答える
0

jQueryの使用:

jsFiddleワーキングリンク

class="linkBut​​ton"をLinkBut​​tonsに設定します。

 <asp:LinkButton ID="lnk" class="linkButton" />

次のjQueryコードを使用して、 liにクラスを設定します。

     $(function () {
            $(".linkButton").each(function (index) {
                $(this).on("click", function () {
                      $(".linkButton").each(function (index) {
                         $(this).closest("li").removeClass("active");
                      });
                    $(this).closest("li").addClass("active");
                });
            });
        });
于 2012-09-19T13:44:56.940 に答える
0

コード ビハインド - C# :

コードビハインドで変更するために、li にrunat="server"andを追加できますid=""

void Repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{
       if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
       {
         var li = (HtmlControl)e.Item.FindControl("IdOfYourLI");  
         if(condition) //Adjust your condition
         {
           li.Attributes.Add("class", "active");
         }
       }    
 }

JavaScript で変更することもできます:

メソッドに追加しelement idて使用しますGetElementById

youIdOfControlLI.className = 'active';
于 2012-09-19T13:22:21.247 に答える