Знает ли MasterPage, какая страница отображается?

Когда я перехожу на веб-сайт с помощью 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>

С более элегантным решением для навигации, которое выделяет ссылку на страницу, задав для идентификатора элемента списка значение «текущий». В настоящее время каждая страница воссоздает навигацию с текущим идентификатором соответствующей ссылки.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
27 043
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

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

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

Также есть Request.RawURL

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

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

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

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

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

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

Я не использую элемент управления навигацией, это просто стилизованный список.

Anders 10.10.2008 01:05

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

Ответ принят как подходящий

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

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

пытаться

this.Page.Master

Это даст вам главную страницу текущей страницы.

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

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

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

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

        }
    }

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

Объяснение им очень поможет

user3972104 04.10.2014 10:07

Это решение не сработает, если у вас есть две страницы ASPX с одним и тем же кодом.

Babak Naffas 10.12.2014 01:25

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

this.Page.Title

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

это в 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");

Другие вопросы по теме