0

我在服务器中使用 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>

我需要向我在服务器中构建的 li 添加类,有些人是这样认为的

selected MeduId=3;     
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList();
ul_HeaderMenu.DataBind();
ul_HeaderMenu.ElementAt[3]AddClass('test');

我只是找到了向 li 添加类的方法。

4

2 回答 2

2

您可以在列表中使用 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");
}
于 2013-08-18T10:06:03.193 回答
0

ListView 由您的 ItemTemplate 部分定义的项目组成,而不是由 li 元素组成。因此,当您通过索引从 ListView 中获取元素时,您首先需要找到 li,然后才能向其添加类。因此,您需要对FindControl项目使用方法来获取 li。

现在,这里有一些问题。

ListView 没有ElementAt方法,它的Items集合有它,但我仍然会用它ul_HeaderMenu.Items[3]来获取索引处的元素。

如果你想使用FindControl方法,你需要在你的 ItemTemplate 中为你的 li 添加一个 id,你将把它传递给 FindControl 来获取 li。

AddControl方法不存在,你必须使用Attributesli 上的集合来更改类属性。在这里你必须小心,因为你想保留已经存在的类,所以你必须连接字符串,但你不想多次添加同一个类,因此最好创建一个辅助方法AddClass 接受字符串并将其与添加的类一起返回。

您可以在任何时候执行所有这些操作,但通常您会想要使用该ItemDataBound事件,正如 Lars Anundskas 在此期间所描述的那样。

最后,虽然您可以自由使用您喜欢的任何约定,但我个人觉得您的大小写约定令人困惑——您可以在此处阅读一些有关 Microsoft 的建议。

于 2013-08-18T10:18:08.947 回答