在asp.net中制作动态按钮列表的最简洁方法是什么?

时间:2011-02-09 17:14:47

标签: 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" 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>

我尝试使用此代码:

<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='<%# Eval("parameterName") %>' runat="server"/>
        </li>
    </ItemTemplate>
</asp:ListView>

并在后面的代码中填充它:

  ListView_Tabs.DataSource = comeClass.GetTabs();
  ListView_Tabs.DataBind();

但我没有看到任何明确的方法将class ='selected'设置为我点击的最后一个链接(或者更确切地说是包含该链接的列表项)

所以我的问题是

在asp.net中制作动态按钮列表的最简洁方法是什么,甚至只是在.net中?

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

3 个答案:

答案 0 :(得分:1)

您可以使用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";
}

答案 1 :(得分:1)

您可以利用ListView的SelectedItemTemplate和SelectedIndex属性来完成此任务。

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

然后在您的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>

答案 2 :(得分:0)

改为使用Repeater:

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