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





Вы должны иметь возможность получить страницу, обратившись к свойству Page. IE:
string type = this.Page.GetType().Name.ToString();
Также есть Request.RawURL
Чтобы получить текущий URL-адрес запроса на главной странице, выполните следующие действия:
string s = this.Page.Request.FilePath; // "/Default.aspx"
Я также рекомендую переместить вашу навигацию на главную страницу, а не на страницу содержимого. Это упростит обслуживание / доступ.
Элемент управления навигацией, а не главная страница, должен отвечать за то, какая страница выделена в данный момент.
Либо загруженная страница должна уведомлять элемент навигации, кто это, либо сам элемент управления навигацией должен отслеживать его.
Дело в том, что главные страницы должны быть просто держателями, в которых отображается контент. Они не должны ничего контролировать.
Вы, вероятно, просто использовали бы один из Путь запроса на главной странице, чтобы установить текущий. Я бы, вероятно, также имел свойство на главной странице, чтобы переопределить его, чтобы страницы без ссылок или чего-то еще могли установить его на что-то разумное.
Я согласен с Крисом: используйте элемент управления для отображения этого меню и сообщите ему, какая ссылка должна быть выделена. Вот метод, которым я пользуюсь регулярно. Это может стать более сложным, если у вас есть несколько страниц, для которых нужна одна и та же ссылка, оформленная по-разному, но вы поняли идею.
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];
Объяснение им очень поможет
Это решение не сработает, если у вас есть две страницы ASPX с одним и тем же кодом.
В качестве альтернативы вы можете выполнить поиск по заголовку страницы, если вы установили конкретный заголовок для дочерней страницы вместо главной страницы, попробуйте:
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");
Я не использую элемент управления навигацией, это просто стилизованный список.