Ведущая страница знает, какая страница отображается?

StackOverflow https://stackoverflow.com/questions/189062

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top