Pregunta

Cuando navego en un sitio web utilizando MasterPages, ¿la aplicación sabe en qué página estoy? Si es así, ¿lo almacena en un objeto al que puedo acceder?

La razón por la que pregunto es para poder reemplazar esto:

//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>

Con una solución más elegante para la navegación, que resalta el enlace a la página al establecer el ID del elemento de la lista en "actual". Actualmente, cada página recrea la navegación con el ID de su enlace respectivo establecido en actual.

¿Fue útil?

Solución

Estoy de acuerdo con Chris: use un control para manejar la visualización de este menú y hacerle saber qué enlace debe resaltarse. Aquí hay un método que uso regularmente. Puede volverse más complejo si tiene varias páginas que necesitarían el mismo enlace con un estilo diferente, pero se entiende la idea.

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

Otros consejos

Para obtener la URL de solicitud actual desde la página maestra que haría:

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

También recomiendo mover su navegación a la página maestra en lugar de la página de contenido. Esto facilitará el mantenimiento / acceso.

Sí, utilice el siguiente código en su archivo maestro. Te dará el nombre de la página de contenido.

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

Debería poder obtener la página accediendo a la propiedad Página. IE:

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

Probablemente usaría uno de los Ruta de solicitud desde dentro de la página maestra para establecer la actual. Probablemente también tenga una propiedad en la página maestra para anularla, de modo que las páginas sin enlaces o algo puedan establecerla en algo razonable.

Funcionó para mí de esta manera - Gracias Jared

Esto es lo que hice para que nuestro menú de navegación resalte el elemento del menú actual de la página que estamos viendo. El código está en la página maestra. Básicamente obtienes la ruta del archivo (a la manera de Jared) Usamos el " ~ " en nuestros enlaces, así que tuve que quitar eso. Iterar la colección menuItems del control Menu. Compare la propiedad navigationUrl.

(No soy el mejor programador y aún peor al explicar, ¡pero funciona y me quedé bastante satisfecho!)

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];

Alternativamente, puede buscar el título de la página si ha establecido un título específico para la página secundaria en lugar de intentar la página maestra:

this.Page.Title

Espero que ayude.

esto está en 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");

El control de navegación, no la página maestra, debe estar a cargo de la página que está resaltada actualmente.

O la página que se carga debe notificar al elemento de navegación quién es, o el control de navegación en sí mismo debe realizar un seguimiento.

El punto es que se supone que las páginas maestras son simplemente un titular en el que se muestra el contenido. No se supone que controlen nada.

prueba

this.Page.Master

Te dará la página maestra de la página actual.

También está el Request.RawURL

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top