如何将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的方法。

如何将c#(服务器)中的类添加到ListView-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在此期间所描述的那样。

最后,虽然你可以自由使用任何你喜欢的约定,但就我个人而言,我觉得你的大小写约定令人困惑——你可以在这里阅读一些微软的建议。