Foros del Web » Programación para mayores de 30 ;) » .NET »

Navegacion

Estas en el tema de Navegacion en el foro de .NET en Foros del Web. Hal algun metodo para saber por donde a navegado y esta actualmente el usuario dentro de mi aplicacion web??? Es que me interesaria ponerle la ...
  #1 (permalink)  
Antiguo 14/04/2005, 05:07
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Navegacion

Hal algun metodo para saber por donde a navegado y esta actualmente el usuario dentro de mi aplicacion web???
Es que me interesaria ponerle la ruta por donde a ido y al final la ruta en la que esta. Tipo esto:

SITUACION:contratos activos >servicio de seguridad >servicio de lan

Yo habia pensado ir guardando la ruta en una variable de session pero no se si es lo mas adecuado.

Gracias por cualquier sugerencia.
  #2 (permalink)  
Antiguo 14/04/2005, 05:42
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Podrías almacenar las páginas en variables de session tipo
sub page_load
if not isPostback()
Session("camino") = Convert.toString(Session("camino")) + " > " + Request.Url.AbsolutePath()
end if
end sub

Por ejemplo
  #3 (permalink)  
Antiguo 14/04/2005, 10:00
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
problema

la idea es bueno pero el problema que me da es que cada vez que recargo me añade la misma la misma ruta donde se encuentra.
ej:SITUACION:> /sgc/Menuadministrador.aspx > /sgc/Menuadministrador.aspx > /sgc/Menuadministrador.aspx > /sgc/Menuadministrador.aspx

este es mi codigo (es c#):

if (!IsPostBack)
{
Session["camino"] = Convert.ToString(Session["camino"]) + " > " + Request.Url.AbsolutePath;
control.Text+="<div id='context'><ul>SITUACIÓN:<li>";
control.Text+=Session["camino"].ToString();
control.Text+="</li></ul></div>";
}
  #4 (permalink)  
Antiguo 14/04/2005, 10:20
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Eso lo hará si pulsas sobre el botón actualizar o si redireccionas otra vez a la página, si haces un postback, no debería volver ha introducirtela,

Pues bien, para solucionarlo (y sin tener que desactivar el actualizar ni nada de eso), puedes hacer: (te lo pongo en VB para no equivocarme con la sintaxis)

if not ispostback
dim contenido as string = Session("camino")
if contenido.IndexOf(request.url.absolutepath) = -1
Session("contenido") = contenido + request.url.absolutepath
end if
end if

y así te aseguras de que no se repita en el camino, si quieres que se repita solo si vueleve a ir por otros sitios, podemos mirar otra solución que tengo más o menos en la cabeza, pero si solo quieres un camino, esta solucion te podría valer

Suerte!!
  #5 (permalink)  
Antiguo 14/04/2005, 10:30
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
me da problemas esta linea

if (contenido.IndexOf(Request.Url.AbsolutePath) = -1)

me da problemas de tipo de dato
  #6 (permalink)  
Antiguo 14/04/2005, 10:52
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
en c# los if no son con == ???Quizá es por eso, si no haz una depuración paso a paso y mira que valor devuelve contenido.IndexOf(request.url.absolutepath)
  #7 (permalink)  
Antiguo 15/04/2005, 01:06
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Problemita

el codigo me quedaria asi:

Session["camino"]=Request.Url.AbsolutePath;
string contenido = Session["camino"].ToString();
Response.Write (contenido.IndexOf(Request.Url.AbsolutePath));
if (contenido.IndexOf(Request.Url.AbsolutePath) == -1)
{
Session["camino"] = contenido + " > " + Request.Url.AbsolutePath;
//Session["camino"] = Convert.ToString(Session["camino"]) + " > " + Request.Url.AbsolutePath;
}
situacion.Text+="<div id='context'><ul>SITUACIÓN:<li>";
situacion.Text+=Session["camino"].ToString();
situacion.Text+="</li></ul></div>";

Pero hay un problema y es que Session["camino"] siempre vale la url en la que esta por lo tanto el indexof nunca es igual a -1.
  #8 (permalink)  
Antiguo 15/04/2005, 01:31
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Claro, ¿para que pones la primera línea??
Hay estás asignando a session("camino") la request actual y te cargas todo el camino que hayas guardado anteriormente, hazlo así:

string contenido = session["camino"].ToString();

if (contenido.IndexOf(request.url.absolutepath) == -1)
{
Session["camino"] = contenido + " > " + Request.Url.AbsolutePath;
}
situacion.Text+="<div id='context'><ul>SITUACIÓN:<li>";
situacion.Text+=Session["camino"].ToString();
situacion.Text+="</li></ul></div>";
  #9 (permalink)  
Antiguo 15/04/2005, 01:47
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Ya esta

Ya lo he conseguido, el problema es que en c# al ke inicializar las variables de session y la primera vez session["camino"] no valia nada. Pero lo he solucionado inicializandolo en el global.asa.
Muchas gracias por la ayuda ahora solo me queda cambiar el nombre de las paginas por uno mas identificativo y ya esta.

Un saludo
  #10 (permalink)  
Antiguo 15/04/2005, 01:54
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Oo

Hay un pequeño problema que me temo no tenga solucion y es que si el usuario navega por varias paginas y le da a volver para atras no se le resta la pagina de la variable de session.
  #11 (permalink)  
Antiguo 15/04/2005, 03:36
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Buf, vamos haber (por si acaso esto no funciona, puedes investigar una función javascript que se llama history,en el foro de javascript, yo no tengo ni idea de como va esa función pero la puedes investigar), ya sería del lado del cliente.

Del lado del server yo haría lo siguiente: (super engorroso)

Primero, crearía un tabla con el arbol de la página,
Segundo, crearía una clase con una función que a partir de un array o lo que sea, devuelva el mapa, es decir
si le llega 1-1-3
devuelva principal-Catalogo-producto3, por ejemplo.

Tercero, en cada link de página pasaría por parámetro el código asignado a cada página, es decir, si estoy en catalogo y pincho sobre producto3 haga:
Response.redirect("producto3.aspx?param0=1&param1= 1&param2=3")

y luego en cada página haría:

if not ispostback
Mapa.text = Clase.DevolverArbol(param0,param1,param2)
end if

No se si me has entendido bien, si decides utilizar esto (aunque ya te digo que es bastante "sucio"), miraremos haber como optimizar.

Con esto si pulsan sobre back, no afectaría a nuestro arbol
  #12 (permalink)  
Antiguo 15/04/2005, 03:38
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Lo dicho, solución tiene, y un consejo, en programación NUNCA pienses en imposibles, piensa siempre en soluciones (más o menos efectivas), ok???

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:33.