MasterPage знает, какая страница отображается? - PullRequest
8 голосов
/ 10 октября 2008

Когда я перемещаюсь по веб-сайту с использованием 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 элемента списка значение "текущий" В настоящее время каждая страница воссоздает навигацию с идентификатором соответствующей ссылки, установленным на текущий.

Ответы [ 12 ]

16 голосов
/ 10 октября 2008

Я согласен с Крисом: используйте элемент управления для управления отображением этого меню и информируйте его о том, какая ссылка должна быть выделена. Вот метод, которым я пользуюсь регулярно. Это может стать более сложным, если у вас есть несколько страниц, для которых одна и та же ссылка должна быть оформлена по-разному, но вы поняли идею.

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
9 голосов
/ 10 октября 2008

Чтобы получить текущий URL-адрес запроса на главной странице, вы должны сделать:

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

Я также рекомендую переместить вашу навигацию на главную страницу вместо страницы контента. Это облегчит обслуживание / доступ.

2 голосов
/ 08 июля 2013

Да, используйте приведенный ниже код в вашем мастер-файле. Это даст вам название страницы контента.

Page.ToString().Replace("ASP.","").Replace("_",".")
0 голосов
/ 07 июня 2018

это в 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 голосов
/ 03 июня 2018

В качестве альтернативы вы можете искать заголовок страницы, если вы установили конкретный заголовок для дочерней страницы вместо главной страницы, попробуйте:

this.Page.Title

Надеюсь, это поможет.

0 голосов
/ 04 октября 2014
string s = this.Page.GetType().FullName;
string[] array = s.Split('_');
int count = array.Count<String>();
string currentPage = array[count - 2];
0 голосов
/ 06 мая 2014

У меня так получилось - спасибо, Джаред

Это то, что я сделал, чтобы наше меню навигации выделило текущий пункт меню для просматриваемой страницы. Код находится на главной странице. Вы в основном получаете путь к файлу (путь Джареда) Мы используем "~" в наших ссылках, поэтому мне пришлось убрать это. Выполните итерацию коллекции menuItems элемента управления Menu. Сравните свойство 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;
                }
            }

        }
    }
0 голосов
/ 17 апреля 2013

попробуй

this.Page.Master

Получит главную страницу текущей страницы.

0 голосов
/ 10 октября 2008

Возможно, вы просто используете один из Путь запроса из главной страницы, чтобы установить текущий. Возможно, у меня также есть свойство на главной странице, чтобы переопределить его, чтобы страницы без ссылок или чего-то другого могли установить что-то разумное.

0 голосов
/ 10 октября 2008

Элемент управления навигации, а не главная страница, должен отвечать за то, какая страница выделена в данный момент.

Либо загруженная страница должна уведомить элемент навигации о том, кем она является, либо сам элемент навигации должен отслеживать это.

Дело в том, что главные страницы должны быть просто держателем, в котором отображается контент. Они не должны ничего контролировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...