【问题标题】:Does a MasterPage know what page is being displayed?MasterPage 是否知道正在显示的页面?
【发布时间】:2008-10-09 20:26:58
【问题描述】:

当我在使用 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 设置为当前。

【问题讨论】:

    标签: asp.net navigation master-pages


    【解决方案1】:

    我同意 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
    

    【讨论】:

      【解决方案2】:

      要从母版页中获取当前请求 URL,您可以:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          this.Page.Title
          

          希望对你有帮助。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  【解决方案8】:

                  这种方式对我有用 - 谢谢 Jared

                  我这样做是为了让我们的导航菜单突出显示我们正在查看的页面的当前菜单项。代码在母版页中。 你基本上得到了文件路径(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;
                                  }
                              }
                  
                          }
                      }
                  

                  【讨论】:

                    【解决方案9】:
                    string s = this.Page.GetType().FullName;
                    string[] array = s.Split('_');
                    int count = array.Count<String>();
                    string currentPage = array[count - 2];
                    

                    【讨论】:

                    • 解释对他们有很大帮助
                    • 如果您有两个共享相同代码的 .aspx 页面,此解决方案将不起作用。
                    【解决方案10】:

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

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

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

                    【讨论】:

                    • 我没有使用导航控件,它只是一个样式列表。
                    【解决方案11】:

                    试试

                    this.Page.Master
                    

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

                    【讨论】:

                      【解决方案12】:

                      还有 Request.RawURL

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-10-02
                        • 1970-01-01
                        • 2012-08-14
                        • 2020-02-16
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多