8

当我在使用 MasterPages 的网站上导航时,应用程序是否知道我在哪个页面上?如果是这样,它是否将其存储在我可以访问的对象中?

我问的原因是我可以替换它:

//masterpage 
<div id="nav_main">
   <ul><asp:ContentPlaceHolder ID="navigation" runat="server">                    
   </asp:ContentPlaceHolder></ul>
</div>

//content page(s)
<asp:Content ContentPlaceHolderID="navigation" ID="theNav" runat="server">
   <li><a href="default.aspx">Home</a></li>
   <li id="current"><a href="faq.aspx">FAQ</a></li>
   <li><a href="videos.aspx">Videos</a></li>
   <li><a href="#">Button 4</a></li>
   <li><a href="#">Button 5</a></li>
</asp:Content>

使用更优雅的导航解决方案,通过将列表项的 ID 设置为“当前”来突出显示页面链接。目前,每个页面都重新创建导航,并将其各自链接的 ID 设置为当前。

4

12 回答 12

16

我同意 Chris:使用控件来处理此菜单的显示,并使其知道应该突出显示哪些链接。这是我经常使用的一种方法。如果您有多个页面需要不同样式的相同链接,它可能会变得更加复杂,但您明白了。

Dim thisURL As String = Request.Url.Segments(Request.Url.Segments.Count - 1)
Select Cast thisUrl
   Case "MenuItem1.aspx"
       lnkMenu1.CssClass = "Current"
   Case "MenuItem2.aspx"
       lnkMenu2.CssClass = "Current"
End Select
于 2008-10-09T21:19:43.623 回答
9

要从母版页中获取当前请求 URL,您将执行以下操作:

string s = this.Page.Request.FilePath; // "/Default.aspx"

我还建议将您的导航移动到母版页而不是内容页。这将使维护/访问变得更容易。

于 2008-10-09T20:55:26.683 回答
2

是的,在您的主文件中使用以下代码。它将为您提供内容页面名称。

Page.ToString().Replace("ASP.","").Replace("_",".")
于 2013-07-08T11:56:57.593 回答
1

或者,如果您为子页面设置了特定标题而不是母版页,则可以搜索页面标题尝试:

this.Page.Title

希望能帮助到你。

于 2018-06-03T10:06:09.383 回答
1

这是在 C# 中

string thisURL = Request.Url.Segments[Request.Url.Segments.Length - 1];
        if (thisURL.ToLower()== "default.aspx") li1.Attributes.Add("class","yekan active");
        if (thisURL.ToLower() == "experts.aspx") li2.Attributes.Add("class", "yekan active");
于 2018-06-07T12:59:58.313 回答
0

您应该能够通过访问 Page 属性来获取该页面。IE:

string type = this.Page.GetType().Name.ToString();
于 2008-10-09T20:31:56.217 回答
0

您可能只使用母版页中的请求路径之一来设置当前路径。我可能还会在母版页上有一个属性来覆盖它,以便没有链接或其他内容的页面可以将其设置为合理的值。

于 2008-10-09T21:07:22.930 回答
0

它以这种方式对我有用-谢谢贾里德

这就是我所做的让我们的导航菜单突出显示我们正在查看的页面的当前菜单项。代码在母版页中。你基本上得到了文件路径(Jared 的方式) 我们在链接中使用“~”,所以我不得不把它去掉。迭代 Menu 控件的 menuItems 集合。比较 navigateUrl 属性。

(我不是最好的编码员,而且在解释方面更差——但它确实有效,我对此非常满意!)

protected void HighlightSelectedMenuItem()
    {
        string s = this.Page.Request.FilePath; // "/Default.aspx"
        string nav;
        if (s.Contains("~"))
        {
            s = s.Remove(s.IndexOf("~"), 1);
        }

        foreach (MenuItem item in navMenu.Items)
        {
            if (item.NavigateUrl.Contains("~"))
            {
                nav = item.NavigateUrl.Remove(item.NavigateUrl.IndexOf("~"), 1);
                if (s == nav)
                {
                    item.Selected = true;
                }
            }

        }
    }
于 2014-05-06T11:32:15.867 回答
0
string s = this.Page.GetType().FullName;
string[] array = s.Split('_');
int count = array.Count<String>();
string currentPage = array[count - 2];
于 2014-10-04T05:54:45.787 回答
-1

导航控件,而不是母版页,应该负责当前突出显示的页面。

加载的页面应该通知导航项它是谁,或者导航控件本身应该跟踪它。

关键是母版页应该只是显示内容的持有者。它们不应该控制任何东西。

于 2008-10-09T20:56:38.617 回答
-1

尝试

this.Page.Master

它将为您提供当前页面的母版页。

于 2013-04-17T13:44:48.997 回答
-2

还有 Request.RawURL

于 2008-10-09T20:51:36.363 回答