0

有点混乱的标题。

这是我的旧导航

<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 不存在,我无法将其设置为活动状态。

我试图思考让这个工作的最佳方法是什么。有人有建议吗?

谢谢你。

4

1 回答 1

1

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

请确保将 DataItem 转换为适当的对象。例如,数据行视图

<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();
}
于 2013-04-11T21:29:25.023 回答