在asp.net中创建按钮动态列表最干净的方法是什么?

在asp.net中创建按钮动态列表最干净的方法是什么?,asp.net,Asp.net,我想更改此列表,以便动态填充它: <ul> <li id="Tab1" class="selected" runat="server"> <asp:LinkButton ID="LinkButton1" OnClick="LinkButton1_Click"runat="server"> Tab1 Text </asp:LinkButton> </li> <li id="Tab2" ru

我想更改此列表,以便动态填充它:

<ul>
 <li id="Tab1" class="selected" runat="server">
     <asp:LinkButton ID="LinkButton1" OnClick="LinkButton1_Click"runat="server">
         Tab1 Text
     </asp:LinkButton>
 </li>
 <li id="Tab2" runat="server">
     <asp:LinkButton ID="LinkButton2" OnClick="LinkButton2_Click" runat="server">
         Tab2 Text
     </asp:LinkButton>
 </li>
 <li id="Tab3" runat="server">
     <asp:LinkButton ID="LinkButton3" OnClick="LinkButton3_Click" runat="server">
         Tab3 Text
     </asp:LinkButton>
 </li>
</ul>
但是我看不到任何明确的方法可以将class='selected'设置为我单击的最后一个链接(或者更确切地说是包含该链接的列表项)

所以我的问题是

在asp.net中,甚至仅仅在.net中,创建按钮动态列表的最干净方法是什么?


这不一定是我的方法。我甚至不确定使用ListView是否是解决此问题的最佳方法。

请改用中继器:

<ul>
<asp:Repeater runat="server">
<ItemTemplate>
<li>
    <asp:LinkButton runat="server" CommandName='' CommandArgument='' Text='' />
</li>
</ItemTemplate>
</asp:Repeater></ul>

您可以使用ItemDataBound事件进行此操作,并在其中设置所选类。 您将使用CommandParameter标识所选项目。 将e.DataItem与设置为CommandParameter的项的属性进行比较

因此,在ItemDataBoud中会有类似的内容:

YourClass item = e.Item.DataItem as YourClass;
if(item == null) return;
if(item.YourKeyProp == e.CommandArgument)
{
Literal classlit = e.Item.FindControl("classLiteral") as Literal;
if(classlit == null) return:
classlit.Text = "Selected";
}

您可以利用ListView的SelectedItemTemplate和SelectedIndex属性来完成此操作

在ListItemTemplate中将CommandName属性更改为“Select”。这样,当回发发生时,ListView将具有所选链接按钮的行索引。然后,当单击LinkButton引发ItemSelected事件时,您可以将自定义命令设置为CommandArgument参数以进行任何自定义处理

然后在SelectedItemTemplate中,您可以在那里应用该类。您的ListView如下所示:

<asp:ListView ID="ListView_Tabs" OnItemCommand="ListView_ChangeTab" runat="server">
    <LayoutTemplate>
        <div class="tabs">
            <ul>
                <li id="itemPlaceholder" runat="server" />
            </ul>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <li>
            <asp:LinkButton Text='<%# Eval("displayName") %>' CommandName="Select"  CommandArgument='<%# Eval("parameterName") %>' runat="server"/>
        </li>
    </ItemTemplate>
    <SelectedItemTemplate>
        <li>
            <asp:LinkButton Text='<%# Eval("displayName") %>' CommandName="Select" CommandArgument='<%# Eval("parameterName") %>' CssClass="selected" runat="server"/>
        </li>
    </SelectedItemTemplate>
</asp:ListView>


尝试将类设置为最后一个链接时遇到的问题是什么?尝试设置class=“selected”时遇到的“问题”是什么?您是如何尝试这样做的?您到底是如何设置class='selected'的?从标记中,还是您正在做其他事情?问题是没有明确的方法来做,而不是在尝试做时遇到问题。我设想的方法是将class='selected'添加到引发单击事件的Listview项中。但我看不出有什么干净的方法可以做到这一点。Repeater更轻,我只是用它来重复项目。例如,它没有页眉或页脚功能。由于您的问题提到“最干净”,这是相关的。您如何将class='selected'添加到包含已单击链接的
  • 中?您可以在ItemDataBound事件中访问ItemTemplate块中的任何控件。
    YourClass item = e.Item.DataItem as YourClass;
    if(item == null) return;
    if(item.YourKeyProp == e.CommandArgument)
    {
    Literal classlit = e.Item.FindControl("classLiteral") as Literal;
    if(classlit == null) return:
    classlit.Text = "Selected";
    }
    
    <asp:ListView ID="ListView_Tabs" OnItemCommand="ListView_ChangeTab" runat="server">
        <LayoutTemplate>
            <div class="tabs">
                <ul>
                    <li id="itemPlaceholder" runat="server" />
                </ul>
            </div>
        </LayoutTemplate>
        <ItemTemplate>
            <li>
                <asp:LinkButton Text='<%# Eval("displayName") %>' CommandName="Select"  CommandArgument='<%# Eval("parameterName") %>' runat="server"/>
            </li>
        </ItemTemplate>
        <SelectedItemTemplate>
            <li>
                <asp:LinkButton Text='<%# Eval("displayName") %>' CommandName="Select" CommandArgument='<%# Eval("parameterName") %>' CssClass="selected" runat="server"/>
            </li>
        </SelectedItemTemplate>
    </asp:ListView>