MasterPage是否知道正在显示的页面?

And*_*ers 8 navigation asp.net master-pages

当我在使用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>
Run Code Online (Sandbox Code Playgroud)

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

Blu*_*mer 16

我同意克里斯:使用一个控件来处理这个菜单的显示,并让它知道应该突出显示的链接.这是我经常使用的方法.如果您有多个页面需要相同的链接样式,但是您可以理解,这可能会变得更加复杂.

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
Run Code Online (Sandbox Code Playgroud)


Jar*_*red 9

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

string s = this.Page.Request.FilePath; // "/Default.aspx"
Run Code Online (Sandbox Code Playgroud)

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