突出显示ASP.NET Web应用程序中的菜单栏

时间:2011-04-01 19:48:28

标签: c# asp.net css menubar

我有一个Visual Studio 2010,当我添加一个新项目时,VS给了我默认的CSS和UI主题。我有6个aspx页面。现在,每当用户进入某个特定页面时,我希望该页面的菜单栏突出显示,以便用户知道他/她所在的页面。

我有一个名为:CommSetup.aspx的页面。在page_load中我写了这段代码:

在母版页中我改变了这个:

  

在代码背后:

protected void Page_Load(object sender, EventArgs e)
    {
        foreach (MenuItem item in NavigationMenu.Items)
        {
            var navigateUrlParams = item.NavigateUrl.Split('/');
            if (Request.Url.AbsoluteUri.IndexOf(navigateUrlParams[navigateUrlParams.Length - 1]) != -1)
            {
                item.Selected = true;
            }
        }
    }
  

标记:

 <body runat ="server" clientidmode ="Static" id = "MasterBody">
    <form runat="server">......
<asp:Menu ID="NavigationMenu" runat="server"  StaticSelectedStyle-CssClass ="Selected"      CssClass="menu" .....

这是我在Site.css中添加的内容:

div.menu ul li a.Selected
{
    background-color: #bfcbd6;
    color: #465c71;
    text-decoration: none;
}

3 个答案:

答案 0 :(得分:3)

这是一个完全按照你要求使用CSS的例子:

http://hicksdesign.co.uk/journal/highlighting-current-page-with-css

您应该能够在控件上使用静态ID命名(而不是让ASP.NET为每个控件分配ID值)来实现这一点。

修改 要使其与母版页一起使用,请将母版页中的<body>标记更改为:

<body runat="server" clientidmode="Static" id="MasterBody">

然后在每个页面的Page_Load中,您可以覆盖每个页面的ID(我的示例中的母版页是SiteMaster类型):

protected void Page_Load(object sender, EventArgs e)
{
    Control c = Page.Master.FindControl("MasterBody");
    if (c != null)
    {
        c.ID = "Page1";
    }
}

更新(2):

我尝试运行Farzin的示例,但它似乎没有用,所以这是我能够验证的功能(在您的内容页面中您不需要之前的Page_Load):< / p>

<强>的Site.Master

<asp:Menu ID="NavigationMenu" ...>
    <StaticSelectedStyle CssClass="selected" />
    ...
</asp:Menu>

<强> Site.master.cs

protected void Page_Load(object sender, EventArgs e)
{
    foreach (MenuItem item in NavigationMenu.Items)
    {
        item.Selected = Page.ResolveUrl(item.NavigateUrl).ToLowerInvariant() == Request.Path.ToLowerInvariant();
    }
}

<强>样式/的site.css

div.menu ul li a.selected
{
    /* put your style definition here */
}

答案 1 :(得分:1)

您应该解析Master页面中的当前url(后面的代码)并将不同的css clss分配给属于当前url的菜单项。

        foreach (MenuItem item in NavigationMenu.Items)
        {
            var navigateUrlParams = item.NavigateUrl.Split('/');
            if(Request.Url.AbsoluteUri.IndexOf(navigateUrlParams[navigateUrlParams.Length - 1]) != -1)
            {
                item.Selected = true;
            }
        }

将此代码放在主母版页的Form_Load事件中(代码隐藏)

答案 2 :(得分:0)

您可以使用ASP.NET站点导航功能。斯科特·米切尔已经发表了一篇关于它的权威性文章here