程序化解决方案,用于更改导航ID以突出显示当前页面ASP.NET

And*_*ers 10 css navigation asp.net

我正在用Visual Studio 2008和ASP.NET 3.5编写一个网站.我设置了一个母版页来简化布局并保留内容页面而不是内容和布局.

导航是列表,css'd所以它看起来像一个酒吧.为了突出显示栏上的页面,列表项需要如下所示<li id="current">.<asp:ContentPlaceHolder>如果我可以避免它,我不想使用它.是否有一些代码可以添加到我的每个页面(或者只是添加到母版页?)来实现这一目标,还是我坚持使用<asp:ContentPlaceHolder>

Jos*_*ody 13

您是否考虑过使用Web.sitemap文件?这真的很容易.如果您的站点地图文件看起来像这样......

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode>
    <siteMapNode url="~/Default.aspx" title="Home"  description="" />
    <siteMapNode url="~/Blog.aspx" title="Blog"  description="" />
    <siteMapNode url="~/AboutUs.aspx" title="AboutUs"  description="" />
  </siteMapNode>
</siteMap>
Run Code Online (Sandbox Code Playgroud)

...然后您可以在母版页中执行此操作以获得所需的结果:

<asp:SiteMapDataSource ID="sitemapdata" runat="server" ShowStartingNode="false"  />
<ul id="navigation">
    <asp:Repeater runat="server" ID="navrepeater" DataSourceID="sitemapdata">
        <ItemTemplate>
            <li class="<%# SiteMap.CurrentNode.Equals(Container.DataItem) ? "activenav" : "inactivenav" %>"><a href="<%# DataBinder.Eval(Container.DataItem, "url") %>"><%# DataBinder.Eval(Container.DataItem, "title") %></a></li>
        </ItemTemplate>
    </asp:Repeater>
</ul>
Run Code Online (Sandbox Code Playgroud)

当前页面的LI将具有一类"activenav"(或您决定使用的任何内容),而其他页面将具有"inactivenav"类.你可以相应地编写你的CSS.这是我在我的网站上使用的技术,效果很好.

  • 这对我有用 - 一个小问题,我不得不为SiteMap.CurrentNode == null添加一个检查,因为我所拥有的所有页面都不在站点地图中.这似乎是最干净的选择! (2认同)

Joh*_*han 10

将属性添加到名为Page Section的母版页

public string PageSection { get; set; }
Run Code Online (Sandbox Code Playgroud)

将MasterType页面指令添加到内容页面的顶部

<%@ MasterType VirtualPath="~/foo.master" %>
Run Code Online (Sandbox Code Playgroud)

在后面的内容页面代码中,设置母版页的PageSection属性

Master.PageSection = "home";    
Run Code Online (Sandbox Code Playgroud)

在主页面中,将body标记设置为服务器标记

<body ID="bodyTag" runat="server">
Run Code Online (Sandbox Code Playgroud)

在后面的母版页代码中,使用该属性在body标记上设置类

bodyTag.Attributes.Add("class", this.PageSection);
Run Code Online (Sandbox Code Playgroud)

为每个导航项添加唯一的ID属性.

在您的css中,根据当前页面类更改导航项的显示

.home #homeNavItem,
.contact #contactNavItem
{ 
    color: #f00; 
} 
Run Code Online (Sandbox Code Playgroud)