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

时间:2008-10-09 20:26:58

标签: asp.net navigation 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>

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

12 个答案:

答案 0 :(得分: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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:2)

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

Page.ToString().Replace("ASP.","").Replace("_",".")

答案 3 :(得分:0)

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

string type = this.Page.GetType().Name.ToString();

答案 4 :(得分:0)

您可能只是使用母版页中的Request path之一来设置当前值。我可能在母版页上也有一个属性来覆盖它,所以没有链接或其他东西的页面可以将它设置为合理的。

答案 5 :(得分:0)

这对我有用 - 谢谢Jared

我这样做是为了让我们的导航菜单突出显示我们正在查看的页面的当前菜单项。代码位于母版页中。 你基本上得到了文件路径(Jared&#39; s) 我们使用&#34;〜&#34;在我们的链接中所以我不得不剥离它。 迭代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;
                }
            }

        }
    }

答案 6 :(得分:0)

string s = this.Page.GetType().FullName;
string[] array = s.Split('_');
int count = array.Count<String>();
string currentPage = array[count - 2];

答案 7 :(得分:0)

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

this.Page.Title

希望它有所帮助。

答案 8 :(得分:0)

这是在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");

答案 9 :(得分:-1)

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

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

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

答案 10 :(得分:-1)

尝试

this.Page.Master

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

答案 11 :(得分:-2)

还有Request.RawURL