c# - ¿Puedes tener 2 urls que apuntan a la misma página en un asp: control de menú?
asp.net aspmenu (4)
Tengo un menú asp: y contiene un elemento de menú de nivel superior que apunta a http://www.abc.com/one.aspx . Cuando pasa el cursor sobre el elemento de menú de nivel superior, muestra un menú desplegable y una de las selecciones es Una que apunta a http://www.abc.com/one.aspx . Aparentemente, no puedo hacer esto, ¿así que he estado poniendo un? al final de la segunda url para evitar esto. Tenía curiosidad sobre si es posible tener dos URL que apuntan a la misma ubicación en un asp: Menú?
Tuve el mismo problema y utilicé una pequeña variación de su solución: agregué anclajes a la URL, por ejemplo:
Por cierto: estaba usando un archivo de mapa del sitio, y cuando agregas nodos con la misma URL a ese archivo, entonces el error / excepción es bastante claro:
Se encontraron varios nodos con la misma URL ''/WebSite1/MyPage.aspx''. XmlSiteMapProvider requiere que los nodos de sitemap tengan URL únicas.
Así que supongo que realmente no es posible tener URL idénticas.
Yo no lo creo.
El control de menú usa la propiedad NavigateUrl de cada elemento como el identificador para resaltar y expandir el menú correctamente: si tiene dos nodos con la misma URL, ¿cómo sabrá el control cuál resaltar?
Puede adjuntar una variable de cadena de consulta que cambie, por ejemplo
<siteMapNode url="~/UnderConstruction.aspx?x=1" title="Customer" description="Customer" />
<siteMapNode url="~/UnderConstruction.aspx?x=2" title="User" description="User" />
<siteMapNode url="~/UnderConstruction.aspx?x=3" title="Area" description="Area" />
<siteMapNode url="~/UnderConstruction.aspx?x=4" title="Well" description="Well" />
<siteMapNode url="~/UnderConstruction.aspx?x=5" title="Build Report" description="Build" />
Descubrí que mi solución en el comentario anterior solo funcionaba en Firefox, esta es una solución mejorada para hacer que la página se actualice incluso si hace clic en el mismo enlace que el actual pero con una etiqueta hash:
$(document).ready(function () { // refresh page when clicking menu item with current address $(''#<%=aspMenu.ClientID%> a'').click(function () {
var currentUrl = location.pathname;
var clickedUrl = $(this).attr(''href'');
if (currentUrl.indexOf(''#'') != -1 || clickedUrl.indexOf(''#'') != -1){
if (currentUrl.indexOf(''#'') != -1)
currentUrl = currentUrl.substring(0, currentUrl.indexOf(''#''));
if (clickedUrl.indexOf(''#'') != -1)
clickedUrl = clickedUrl.substring(0, clickedUrl.indexOf(''#''));
if (currentUrl == clickedUrl)
location.reload();
}); });
O incluso mejor: eliminando los anclajes con los dígitos de los hrefs en el documento listo:
$(document).ready(function () {
$(''#<%=aspMenu.ClientID%> a'').each(function () {
var re = /#/d/
var url = $(this).attr(''href'');
$(this).attr(''href'', url.replace(re, ""));
});
});