• Jueves 14 de Noviembre de 2024, 07:58

Autor Tema:  Hipervinculo Opcional  (Leído 6993 veces)

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Hipervinculo Opcional
« en: Martes 10 de Mayo de 2005, 12:12 »
0
¿Como se podría hacer esto?
Supongamos que tengo una tabla que entre otras cosas tiene una lista de URLs, pero que algunas pueden estar vacías.
Ahora bien, me monto un repeater que lea la tabla y muestre los datos, pero que en el caso de la URL muestre un hipervinculo solo en el caso de que el valor que reciba no sea nulo.

Es que no estoy conforme con este código:
Código: Text
  1.  
  2. <asp:HyperLink id="Hyperlink4" runat="server" Text="Ver más" Target="_blank" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "URL") %>'></asp:HyperLink>
  3.  
  4.  

Cuando la URL es nula, se ve igualmente un texto "Ver más" aunque esté desactivado.
Lo que quiero es que no aparezca absolutamente nada.

¿Como podría hacerse?

pinareta

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #1 en: Martes 10 de Mayo de 2005, 15:05 »
0
depende de como quieras hacerlo, si la url te tiene que volver despues de una recarga pon el atributo visible a true o false segun llegue llena o vacia, o bien puedes hacerlo con estilos display none o display inline

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #2 en: Martes 10 de Mayo de 2005, 17:28 »
0
Hm... ¿Que?  :wacko:
Estás suponiendo que tengo conocimientos medios de ASP.Net y en realidad apenas llevo 3 días con este lenguaje y a base de copiar y pegar ejemplos de tutoriales.

Aun así, creo que entiendo lo del Div. Meter el link en un Div con Display = none podría servir; pero aun no sé como gestionarlo ya que no sé usar condicionales.

Técnicamente, tendría que ser posible crear una función con dos parametros, uno el identificador del Div (por si quiero usarla con varios Divs diferentes) y otro una cadena que vendría a ser el enlace.
Dentro de la función habría un if que comprobaría si la cadena no está vacía, y en caso de que lo estuviera, cambiaría el Display del Div con la identificación pasada por parametro y lo ocultaría (o si el Div está oculto por defecto y la cadena tiene una direccion válida, lo mostraría).

Mis dudas son:
¿Cómo se hace eso y como se implementa en ASP.Net?
¿Como se llama a esa función, desde donde y de qué manera se le pasan los parámetros?

Tened paciencia conmigo, que soy novato. :(

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #3 en: Miércoles 11 de Mayo de 2005, 14:58 »
0
Casi lo tengo...
Repasemos:
-Tenemos un repeater enlazado a un dataset con varias columnas que guardan driecciones de internet o pueden estar vacíos.
-Dentro del repeater hay un par de celdas que deben mostrar un hipervinculo solo en el caso de que el enlace no esté vacío
-Puedo obtener el contenido de cada columna del dataset conectado al Repeater con este código: <%# DataBinder.Eval(Container.DataItem, "Link") %>

Una solucion podría ser:
Código: Text
  1.  
  2. &#60;td align=&#34;center&#34;&#62;
  3.   &#60;%if (ENLACE &#60;&#62; &#34;&#34;)%&#62;
  4.           &#60;div&#62;
  5.     &#60;asp:HyperLink Font-Name=arial Font-size= 10pt id=&#34;Hyperlink5&#34;runat=&#34;server&#34; Text=&#34;Cuña&#34; Target=&#34;_blank&#34; NavigateUrl='&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;'&#62;
  6.           &#60;/asp:HyperLink&#62;&#60;/div&#62;
  7.  &#60;%end if%&#62;
  8. &#60;/td&#62;
  9.  
  10.  
Siempre y cuando en ENLACE me dejase meter <%# DataBinder.Eval(Container.DataItem, "Link3") %>
¡Pero no me deja!  :hitcomp:

Estoy empezando a odiar el ASP.Net.  :angry:

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #4 en: Miércoles 11 de Mayo de 2005, 15:24 »
0
Hola,

pero cuando dices que no te deja poner el DAtaBinder en el lugar de Enlace...
lo intentas poner con los caracteres <% o sin ellos??

es decir, pones esto:
Código: Text
  1.  
  2. &#60;%if ( &#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62; &#60;&#62; &#34;&#34;)%&#62;
  3.  
  4.  
o esto?
Código: Text
  1.  
  2. &#60;%if ( # DataBinder.Eval(Container.DataItem, &#34;Link3&#34;)  &#60;&#62; &#34;&#34;)%&#62;
  3.  
  4.  

entiendes porque lo pregunto?

saludos, suerte y iun poco de paciencia.

PD: Yo para crear estructuras en forma de tabla a partir de datos de la BD suelo utilizar el DataGrid. Nunac he usado el Repeater y tampoco conozco la sventajas y desventajas de cada uno. Solo quiero decirte que hay alternativas al Repeater.
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

uXeLL

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #5 en: Jueves 12 de Mayo de 2005, 02:49 »
0
Bueno como dice Jack el Destripador..vamos por partes   :rolleyes:
lo primero, como ocultamos una capa? facil, codigo al canto:
Código: Text
  1.  
  2. &#60;html&#62;
  3. &#60;head&#62;
  4. &#60;script language=&#34;javascript&#34;&#62;
  5. function f_desaparecer()
  6. {
  7. document.getElementById('capa').style.visibility='hidden';
  8.  
  9. }
  10. &#60;/script&#62;
  11. &#60;/head&#62;
  12.  
  13. &#60;body&#62;
  14. &#60;div id=&#34;capa&#34;&#62;
  15. &#60;input type=&#34;button&#34; id=&#34;boton&#34; name=&#34;boton&#34; value=&#34;pulsa&#34; onclick=&#34;f_desaparecer();&#62;
  16. &#60;/div&#62;
  17. &#60;/body&#62;
  18. &#60;/html&#62;
  19.  
Esto simplemente oculta el boton cuando hacemos click.

Si hasta aqui has comprendido pasamos al siguiente punto  :smartass:

Simplemente con pasar el valor del <%# DataBinder.Eval(Container.DataItem, "Link3") %> a una funcion javascript y dependiendo de si hay enlace o no ocultamos dicha capa,como? tranqui, ejemplo:
Código: Text
  1.  
  2. &#60;asp:HyperLink id=&#34;Hyperlink5&#34;runat=&#34;server&#34; Text=&#34;Cuñao&#34;  NavigateUrl=&#34;javascript:f_ocultaenlace('&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;');&#34; &#62;
  3.  
Código: Text
  1. function f_ocultaenlace (enlace){
  2. if enlace=''
  3. {
  4. document.getElementById('capa').style.visibility='hidden';
  5. }
  6.  
  7. }
  8.  

Esto lo he hecho rapido osea que algun fallito tiene que tener, mayusculas,comas,comillas,etc...pero vamos lo esencial esta explicado

PD: si no sirviera con el webcontrol HyperLink,cosa que no he probado, hazlo con un hipervinculo html simple,bueno eso suponiendo que no hagas nada raro con los enlaces mas que mostrarlos....

PD2:Tu nombre me suena y no sé de qué, consumes Nestea en grandes dosis??
 :whistling:    :D

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #6 en: Jueves 12 de Mayo de 2005, 10:39 »
0
Tiene toda la pinta de que podría funcionar... pero falla y por una vez creo saber por qué (algo es algo, desde que estoy con ASP el programa me revienta cada 2 por 3 y no tengo ni puñetera idea de por qué motivo. El que no se consuela es porque es tonto.)

Este trozo de código
Código: Text
  1.  
  2. &#60;asp:HyperLink id=&#34;Hyperlink5&#34;runat=&#34;server&#34; Text=&#34;Hermano Político&#34;  NavigateUrl=&#34;javascript:f_ocultaenlace('&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;');&#34; &#62;
  3.  
  4.  
hace reventar la aplicación con el mensaje: Etiqueta de servidor incorrecta
Por lo visto cuando llega el turno de cargarse al NavigateUrl este se encuentra con que en vez de una direccion Http como diox manda, lo que tiene es un fuerte chorizo de javascript que ni es direccion ni es nada.
He preguntado a un compañero y en el caso de que la función javascript devolviese la misma direccion que le entra tampoco sería una solución, ya que el código asp se ejecuta antes que cualquier javascript.

Hm... La funcion javascript podría funcionar e incluso podría añadirle otro parametro que sería el nombre de la capa que quiero ocultar (porque son varias y así ahorro codigo). Si pudiera llamarla dentro del Repeater cuando está a punto de cargar la capa, pero sin meterla dentro del hipervinculo para no volverlo loco, podría funcionar. ¿Cómo podría hacerlo?

No sé si algun día podré ganarme la vida con la programación; pero de buen seguro que no será gracias a mi pericia con el ASP.Net

PD: Increible... Mi aficcion al Nestea traspasa fronteras. :blink:

uXeLL

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #7 en: Jueves 12 de Mayo de 2005, 12:21 »
0
Esto pasa por las prisas  :P. Yo no he probado nada de lo que te he dicho  :whistling:
Citar
He preguntado a un compañero y en el caso de que la función javascript devolviese la misma direccion que le entra tampoco sería una solución
Seguro? vaya si es asi me has pillado.Tiene su sentido... Uno es un lenguaje que se ejecuta en el servidor y otro en el  cliente.

De todas formas,ahora mismo pensando detenidamente, la función porque no la hacemos en ASP.NET?? solucionaria el problema.La funcion miraria el resultado del enlace y ocultaria la capa,eso es simple pero date cuenta de que la capa debes convertirla en un control de servidor.

Código: Text
  1. &#60;asp:HyperLink id=&#34;Hyperlink5&#34;runat=&#34;server&#34; Text=&#34;Hermano Político&#34;  NavigateUrl=&#34;f_ocultaenlace('&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;');&#34; &#62;
  2.  

En codebehind harias la función.

PD:Si que traspasa y tu salvapantalla estilo Matrix tb  :rolleyes:

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #8 en: Jueves 12 de Mayo de 2005, 15:39 »
0
Ay, avezado... ¿Tú estás seguro de que se puede hacer la barrabasada de pasarle una función (del lenguaje que sea) a una propiedad que espera un Hyperlink sin que el compilador te escupa en la cara?
Lo digo porque no hay manera de que a mi me lo acepte.
Hasta que no vea una página en la que esté funcionando esa técnica no me lo creeré. :no:

Mientras tanto voy a poner el fondo de la pantalla en negro para que si el link está desactivado no se vea; pero eso no es muy elegante que digamos. &lt;_&lt;

¿La función OcultaDeUna****Vez en ASP debería ser asi?
Código: Text
  1.  
  2. Function OcultaDeUna****Vez(ByVal Enlace As Object, ByVal url As String)
  3.         If url = &#34;&#34; Then
  4.             Enlace.Visible = False
  5.         End If
  6.         Return url
  7.     End Function
  8.  
  9.  
Entonces en el hyperlink habría esto.
Código: Text
  1.  
  2. &#60;asp:HyperLink Font-Name=arial Font-size= 10pt id=&#34;HyperCuña&#34; runat=&#34;server&#34; Text=&#34;Cuña&#34; Target=&#34;_blank&#34; NavigateUrl='OcultaDeUna****Vez(HyperCuña,&#34;&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;&#34;)'&#62;
  3. &#60;/asp:HyperLink&#62;
  4.  
  5.  
Si a alguien le funciona eso que me avise, porque a mi no me va ni a tiros. :fire:
Lo que hace es mostrarme un link activado con esta direccion:
OcultaDeUna****Vez(HyperCuña,"<%# DataBinder.Eval(Container.DataItem, "Link3") %>")

PD: Ahora si que sé quien eres. El otro día por MSN confundí a Cachopan contigo. ^_^

uXeLL

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #9 en: Jueves 12 de Mayo de 2005, 22:12 »
0
:blink: Hereje!!! estas perdiendo la poca fé en la programación!! venga ahora mismo te lees el codigo ascii al revez
Como te he dicho no me responsabilizo de las comas,puntos,etc por la prisa.....  :P  
Citar
Lo que hace es mostrarme un link activado con esta direccion:
OcultaDeUna****Vez(HyperCuña,"<%# DataBinder.Eval(Container.DataItem, "Link3") %>")
Pues claro xavalín,que esperabas si le pasas una cadena?
Valee  :rolleyes: !!  fue fallo mio,lo correcto es esto:
Código: Text
  1. &#60;asp:HyperLink Font-Name=arial Font-size= 10pt id=&#34;HyperCuña&#34; runat=&#34;server&#34; Text=&#34;Cuña&#34; Target=&#34;_blank&#34; NavigateUrl='&#60;%# OcultaDeUna****Vez(DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62; '&#62;
  2. &#60;/asp:HyperLink&#62;
  3.  
y esto si funciona!!enga hombre faltaria más!! :P
Vale pensando más detenidamente y con tiempo de probar,aqui esta tu solucion :
Código: Text
  1. &#60;div id=&#34;capa&#34; runat=&#34;server&#34; style='&#60;%# f_houdini(DataBinder.Eval(Container.DataItem, &#34;Link3&#34;)) %&#62;'&#62;    
  2.  
  3. &#60;asp:HyperLink ID=&#34;HyperCuñao&#34; Runat=server NavigateUrl='&#60;%# DataBinder.Eval(Container.DataItem, &#34;Link3&#34;) %&#62;'&#62;jodido link&#60;/asp:HyperLink&#62;
  4.  
  5. &#60;/div&#62;
  6.  
y en Codebehind:
Código: Text
  1. Public Function f_houdini(ByVal url As String)
  2.         If url = &#34;&#34; Then
  3.             Return &#34;visibility:hidden&#34;
  4.         End If
  5. End Function
  6.  
  7.  
Las explicaciones sobrán... :smartass:  Esta probado,osea que sino no te funciona será o por que me he vuelto a equivocar con las comas,puntos,etc o por que algo haces mal  :whistling:
PD:Me has pillado!! :nosweat:

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #10 en: Viernes 13 de Mayo de 2005, 09:48 »
0
Ooooooh eso si funciona!  :kicking:

Tan solo tuve que modificar un poco la funcion de esta manera
Código: Text
  1.  
  2. Public Function Ocultar(ByVal url As Object)
  3.         If url Is System.DBNull.Value Then
  4.             Return &#34;visibility:hidden&#34;
  5.         End If
  6.     End Function
  7.  
  8.  
Porque como lo que le paso es un dato de una tabla, si lo que contiene es un valor nulo no es un string "", sino el valor DBNull, por lo que la función reventaba cuando le entraba como parametro y después el if se volvía loco por incompatibilidad de tipos.

Te debo una arepa :good:

Gracias a ti también Güorker. ^_^

Toy feliz, me siento realizado.  B)

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Hipervinculo Opcional
« Respuesta #11 en: Viernes 13 de Mayo de 2005, 12:15 »
0
No hay nada que agradecer...

tu exito final es una buena recompensa, además de aprender otras formas de crear tablas.

Felicidades y un aplauso por tu paciencia :bravo:
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]