如何将c#(服务器)中的类添加到ListView-li项中
本文关键字:添加 项中 ListView-li 服务器 | 更新日期: 2023-09-27 18:28:08
我在服务器中使用Linq,我像这个一样填写我的列表
selected MenuId=3;
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList();
ul_HeaderMenu.DataBind();
该客户端代码
<asp:ListView ID="ul_HeaderMenu" runat="server" ClientIDMode="Static">
<ItemTemplate >
<li class="li-HeaderMenu" runat="server" ><%# Eval("Name") %>
<div class="TopMenuActive"></div>
</li>
<ItemTemplate>
</asp:ListView>
我需要在服务器中添加类,有些人认为这是
selected MeduId=3;
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList();
ul_HeaderMenu.DataBind();
ul_HeaderMenu.ElementAt[3]AddClass('test');
我刚刚找到了将类添加到li的方法。
您可以在列表中使用itemdatabound事件
<asp:ListView OnItemDataBound="YourListView_ItemDataBound" ID="ul_HeaderMenu" runat="server" ClientIDMode="Static">
<ItemTemplate >
<li ID="listItem" class="li-HeaderMenu" runat="server" ><%# Eval("Name") %>
<div class="TopMenuActive"></div>
</li>
<ItemTemplate>
</asp:ListView>
然后在代码背后,类似这样的东西;
protected void YourListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
HtmlGenericControl myLi = (HtmlGenericControl)e.Item.FindControl("listItem");
myLi.Attributes.Add("class", myLi.Attributes["class"].ToString() + " yournewclass");
}
ListView由ItemTemplate部分定义的项组成,而不是由li元素组成。因此,当您通过索引从ListView中获取元素时,首先需要找到li,然后才能向其添加类。因此,您需要在项目上使用FindControl
方法来获得li。
现在,这里有一些错误。
ListView没有ElementAt
方法,它的Items
集合有它,但我仍然会使用ul_HeaderMenu.Items[3]
来获取索引处的元素。
如果你想使用FindControl
方法,你需要在ItemTemplate中为你的li添加一个id,你将把它传递给FindControl以获得li。
AddControl
方法不存在,您必须在li上使用Attributes
集合来更改class属性。不过,在这里你必须小心,因为你想保持类已经存在,所以你必须连接字符串,但你不想多次添加同一个类,因此最好创建一个助手方法AddClass,它接受字符串并返回添加的类。
您可以在任何时候执行所有这些操作,但通常您需要使用ItemDataBound
事件,正如Lars Anundskas在此期间所描述的那样。
最后,虽然你可以自由使用任何你喜欢的约定,但就我个人而言,我觉得你的大小写约定令人困惑——你可以在这里阅读一些微软的建议。