如何将动态css类分配给位于ListView内部的超链接

本文关键字:ListView 内部 超链接 分配 动态 css | 更新日期: 2023-09-27 18:08:58

标题有点乱。

这是我原来的导航

<li><a href="General.aspx" runat="server" id="currentGeneral"><i class="home"></i> Overview</a></li>

i类在导航选项卡旁边设置一个图标。

在Site.Master.CS上,我检查了当前页面是什么,并将其设置为活动,使用下面的代码。

currentGeneral.Attributes["class"] = "active";

所以我把导航改成了一个由数据库填充的列表视图。

<asp:ListView ID="ListViewMenu" runat="server" ItemPlaceholderID="menuContainer">
<LayoutTemplate>
    <ul class="menu" id="responsive" runat="server">
        <asp:PlaceHolder ID="menuContainer" runat="server" />
    </ul>
</LayoutTemplate>
<ItemTemplate>
<li><a href='<%#Eval ("href") %>' class='<%#Eval ("id") %>'> <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %></a></li>
</ItemTemplate>
</asp:ListView>

但是现在我正在使用listview, currentGeneral id不存在,我不能将其设置为活动

我一直在想让这个工作的最好方法是什么。有人有什么建议吗?

谢谢。

如何将动态css类分配给位于ListView内部的超链接

如果您想在绑定时访问ListView内部的单个项,您可能需要使用不同的方法使用ItemDataBound事件。

请确保将DataItem强制转换为合适的对象。例如,DataRowView

<asp:ListView ID="ListViewMenu" runat="server" 
    OnItemDataBound="ListViewMenu_ItemDataBound"
    ItemPlaceholderID="menuContainer">
    <LayoutTemplate>
        <ul class="menu" id="responsive" runat="server">
            <asp:PlaceHolder ID="menuContainer" runat="server" />
        </ul>
    </LayoutTemplate>
    <ItemTemplate>
        <li>
            <asp:HyperLink runat="server" ID="HyperLink1" >
               <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %>
            </asp:HyperLink>
        </li>
    </ItemTemplate>
</asp:ListView>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        PopulateMenu();
    }
}
protected void ListViewMenu_ItemDataBound(
    object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var rowView = e.Item.DataItem as DataRowView;
        var hyperLink = e.Item.FindControl("HyperLink1") as HyperLink;
        hyperLink.NavigateUrl = rowView["href"].ToString();
        hyperLink.CssClass = rowView["menu"].ToString();
        if (Request.Path.ToLower().Contains(rowView["href"].ToString()))
            hyperLink.CssClass += " active";
    }
}
void PopulateMenu()
{
    DataAccess da = new DataAccess();
    da.AddParameter("ID", ID, DataAccess.SQLDataType.SQLInteger, 4);
    SiteMenu = da.runSPDataSet("Portal_MenuCreate");
    ListViewMenu.DataSource = SiteMenu;
    ListViewMenu.DataBind();
}