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