Does a MasterPage know what page is being displayed?

前端 未结 12 1442
無奈伤痛
無奈伤痛 2021-01-02 11:53

When I navigate on a website utilizing MasterPages, does the application know what page I am on? If so, does it store it in an object I can access?

The reason I am

相关标签:
12条回答
  • 2021-01-02 12:14

    To get the current request URL from within the master page you would do:

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

    I also recommend moving your navigation into the master page instead of the content page. This will make it easier to maintain / access.

    0 讨论(0)
  • 2021-01-02 12:15
    string s = this.Page.GetType().FullName;
    string[] array = s.Split('_');
    int count = array.Count<String>();
    string currentPage = array[count - 2];
    
    0 讨论(0)
  • 2021-01-02 12:17

    this is in 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");
    
    0 讨论(0)
  • 2021-01-02 12:18

    You should be able to get the page by accessing the Page property. IE:

    string type = this.Page.GetType().Name.ToString();
    
    0 讨论(0)
  • 2021-01-02 12:18

    It worked for me this way - Thanks Jared

    This is what I did to get our nav menu to highlight the current menu item for the page that we are viewing. The code is in the master page. You basically get the filepath (Jared's way) We use the "~" in our links so I had to strip that out. Iterate the menuItems collection of the Menu control. Compare the navigateUrl property.

    (I'm not the best coder and even worse at explaining - but it works and I was quite chuffed with it!)

    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;
                    }
                }
    
            }
        }
    
    0 讨论(0)
  • 2021-01-02 12:19

    I'd concur with Chris: use a control to handle display of this menu and make it aware of what link should be highlighted. Here's a method I use regularly. It may become more complex if you've got multiple pages that would need the same link styled differently, but you get the idea.

    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
    
    0 讨论(0)
提交回复
热议问题