ASP.NET C#使用列表导航如何在活动导航页面上设置id =“current”?

时间:2013-02-04 16:04:22

标签: c# asp.net

我还在学习asp.net,想知道是否有一种简单的方法可以将id =“current”设置到导航栏,这样根据用户所在的页面,它会突出显示该页面。我的模板设置为使用id =“current”来改变链接的样式,我有一个类来设置每个标签的样式。

以下是我的Site.Master中的代码

<nav id="navigation" class="style-1">

<div class="left-corner"></div>
<div class="right-corner"></div>

<ul class="menu" id="responsive">

    <li><a href="home.aspx" id="current"><i class="home"></i> Home</a></li>

    <li><a href="Calendar.aspx"><i class="calendar"></i>Calendar</a></li>

    <li><a href="Bill.aspx"><i class="list"></i>Bills</a></li>

</ul>
</nav>

就像我说的那样,我还在学习,所以我不确定将它放在ContentPlaceHolder中是否更好。我试图只是请求URL并执行if语句,但我不知道如何设置id =。

任何帮助都会很棒。

由于

3 个答案:

答案 0 :(得分:7)

您应该考虑设置菜单项的class而不是id,以便将其显示为突出显示。

你可以这样做。
在每个链接中添加idrunat="server"

<li><a href="home.aspx" id="HomeLink" runat="server"><i class="home"></i> Home</a></li>
<li><a href="Calendar.aspx" id="CalendarLink" runat="server"><i class="calendar"></i>Calendar</a></li>
<li><a href="Bill.aspx" id="BillLink" runat="server"><i class="list"></i>Bills</a></li>

然后在您的母版页的代码隐藏中,您可以在导航到每个类时将其设置为:

protected void Page_Load(object sender, EventArgs e)
{
    SetCurrentPage();
}

private void SetCurrentPage()
{
    var pageName = GetPageName();

    switch (pageName)
    {
        case "home.aspx":
            HomeLink.Attributes["class"] = "current";
            break;
        case "Calendar.aspx":
            CalendarLink.Attributes["class"] = "current";
            break;
        case "Bill.aspx":
            BillLink.Attributes["class"] = "current";
            break;
    }
}

private string GetPageName()
{
    return Request.Url.ToString().Split('/').Last();
}

这会将与您当前页面匹配的链接类设置为current。当然,您需要在样式表中定义该类。但这应该有用。

答案 1 :(得分:0)

在控件中以编程方式设置ID并不是一个好习惯...这取决于您希望如何确定“当前”或活动状态。

如果您使用的是ASP.NET表单,则可以使用Menu ASP.NET控件,该控件将一个类分配给“active”项,并且可以与ASP.NET Sitemap配对/数据绑定。

如果您不想使用ASP.NET表单,可以在href标记中放置一个函数求值,并在ASP.NET Master PAge的代码中声明该函数。像

这样的东西
<a href="home.aspx" class="<% CurrentOrNot("home") %>"> ...

然后声明一个返回字符串的函数:

public void CurrentOrNot(string navItem)
{
    //Do evaulation on URL to determine if we're on the current one or not.
    //pseudocode: if(navItem == Current.Url) return "mycssclassthatiscurrentnav"; else "";

}

在滚动自己之前检查ASP.NET菜单。

答案 2 :(得分:0)

这可能不是最好的答案,但我最近尝试做了类似你正在尝试的事情。首先,我设置一个变量来表示每个菜单链接的css类,然后我获取当前文件路径并检查它是否包含该位置,然后根据页面是否为活动页面设置css类。

 @{
            //some how find out what page we are on so we can set the active attribute
            var HomeClass = "non-active";
            var AboutClass = "non-active";

            string path = HttpContext.Current.Request.FilePath;
            if (path.Contains("Home"))
            {
                HomeClass = "active";
            }
            if (path.Contains("About"))
            {
                AboutClass = "active";
            }



    }

然后,对于菜单,我为类属性

执行了此操作
<a href="/home" class="@HomeClass"></a>
< a href="/about" class=@AbouitClass"> </a>