我想更改此列表,以便动态填充:
<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是解决此问题的最佳方法。
答案 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将具有您选择的LinkButton的行索引。然后,您可以通过单击LinkButton将自定义命令设置为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>