在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'添加到包含已单击链接的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>