• Sábado 9 de Noviembre de 2024, 02:20

Autor Tema:  Lanzar Una Pagina Con Condicion  (Leído 4463 veces)

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Lanzar Una Pagina Con Condicion
« en: Jueves 7 de Junio de 2007, 11:03 »
0
Os pongo en antecedentes:

 

Estoy desarrollando una pagina en ASP.net, necesito hacer que cuando haces click en una imagen se llame a una pagina (eso ya esta hecho), pero con una pequeña peculiaridad... y es que si uno de los campos de la imagen es distinto de NULL, que llame a otra pagina... A ver, intentare explicarme mejor.

 

Tengo un DataList y un Repeater en una pagina en la que cargo el 50% de las páginas. Es decir, en mi Web hay 2 tipos de páginas:

 

-Paginas con Pestañas

-Paginas con Contenido.

 

Las Pestañas las obtengo de la Base de Datos, tienen los siguientes campos (idPestana, Titulo, Contenido, Imagen, PestanaID) Esta tabla esta relacionada consigo misma, para conseguir recursividad e infinitos niveles.

 

La página en la que cargo las pestañas tiene este aspecto:

[IMAGEN 1]

 

Las páginas con Pestañas tienen esa estructura y cada pestaña puede contener otra página con pestañas o una pagina con contenido. La estructura de Contenido es diferente, tal que así:

[IMAGEN 2]

 

Como ves tengo 2 paginas por así decirlo principales, una en la que cargo las paginas con pestañas y otra donde cargo las paginas con Contenido. El problema que tengo es el siguiente:

 

Ahora mismo si haces clic en la página con Pestañas, navegas todo lo que quieras y el problema es que no se hacer para que cuando haces clic en una link de una pestaña que tiene contenido en vez de recargarme la Pagina de tipo 1, que me recargue la pagina de tipo 2.


                -Pagina de tipo 1 => Pestanas.aspx

                -Pagina de tipo 2 => Contenido.aspx

 

Yo entiendo que es una especie de <if>… algo como:

                Si la consulta que estamos haciendo tiene el campo de Contenido = NULL recarga la misma pagina con los valores que tenga que pasar….

 

                Sino, llama a la página Contenido.aspx y pasale los parámetros de la PestanaID.

 

El tema de pasar los parámetros no me preocupa porque ya lo tengo solucionado

 

MUCHISISIMAS GRACIAS POR TODO

 

UN ABRAZO
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #1 en: Jueves 7 de Junio de 2007, 11:10 »
0
Los contenidos los cargas de la BD tambien de la tabla pestaña? Si es asi, supongo que cuando recuperes la pestaña puedes preguntar si contenido <> null y en caso afirmativo cargar la pagina de tipo 2.

Espero que te sirva, saludos

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #2 en: Jueves 7 de Junio de 2007, 12:12 »
0
Si, exacto. Eso es lo que necesito, pero no se hacerlo ;D

Perdona por mi ignorancia, pero es mi primer proyecto de ASP.net y estoy aprendiendo.

Todos los datos los guardo en la misma tabla. Si no es mucha molestia, me podrias decir como poner esa condicion. ¿iria en el Page_load ? es que no tengo ni idea, yo he intentado ponerlo hay, pero me daba error de sintaxis.

Muchas gracias.

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #3 en: Jueves 7 de Junio de 2007, 12:16 »
0
Podrias poner el codigo qeu haces para consultar a la base de datos y para luego mostrar los contenidos que te da el error de sintaxis a ver si viendolo te puedo echar una mano.

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #4 en: Jueves 7 de Junio de 2007, 15:34 »
0
Gracias por tu tan rapida contestacion. Este es el error:

Error   1   Preprocessor directives must appear as the first non-whitespace character on a line

Y este es el codigo que tengo puesto:

<%
    string Cont =  <%# Eval("Contenido") %>;
   
    if(Cont != null || Cont =! "")
    {
        <a id="A1" href='<%# Eval("idPestana", "Contenido.aspx?PestanaID={0}") %>' runat="server">
            <img src='<%# Eval("Imagen") %>' alt="Imagen" />
        </a>
    }
    else
    {
        <a id="A2" href='<%# Eval("idPestana", "Turismo.aspx?PestanaID={0}") %>' runat="server">
            <img src='<%# Eval("Imagen") %>' alt="Imagen" />
        </a>
    }

 %>


Muchas gracias y a ver si me puedes hechar un cable.

Un saludo Javier

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #5 en: Jueves 7 de Junio de 2007, 16:44 »
0
Hola Maxus, yo suelo tener el codigo aparte porque me da mas claridad. De todas formas entiendo que este simbolo "<%" indica que empieza un bloque de codigo que no es HTML (si no es asi corrigeme, yo tambien soy novatillo en bastantes cosas  :P ).

Pero el error al que se refiere creo que no tiene nada que ver con la consulta a la BD.

Podrias poner donde esta puesto ese codigo? Estaria dentro del page load como aqui:

*********************************************************************
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {

Aqui iria el codigo que has puesto anteriormente

    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">

    </form>
</body>
</html>
*********************************************************************

Y ya si puede ser pon el codigo completo de la pagina para ver que puede pasar. Indica donde te aparecen los dientes de sierra dando el error de sintaxis.

Un saludo

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #6 en: Jueves 7 de Junio de 2007, 16:53 »
0
Gracias pero sigo sin saber que poner :brickwall:

Para mi el planteamiento es sencillo.

A ver... el tema es que yo estoy rellendando un DataList con Repeater... y cada registro de la base de datos tendra unas caracteristicas (que tenga contenido o no lo tenga)... En caso de que no tenga el <a href> tendria que ser uno y sino, seria otro.

Yo ahora estoy rellenando la el DataList con el Repeater desde codigo ASP.net... no se si puedo hacerlo en el .cs. Si si se puede, todo estaria arreglado.... pero el caso es que no se hacerlo.

Os pido ayuda amigos.

MUCHISIMAS GRACIAS Javier.  :comp:

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #7 en: Jueves 7 de Junio de 2007, 17:37 »
0
A ver esto es una prueba que he hecho. Esta en VB, pero se traduce facil a C#

*********************************************************************
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim item As DataListItem

        For Each item In DataList1.Items

            Dim hlink As HyperLink = item.FindControl("Hyperlink1")
            Dim des As Label

            des = item.FindControl("ContenidoLabel")
            If des.Text = "True" Then
                hlink.NavigateUrl = "~/url1.aspx"
                hlink.Text = "url1"
            Else
                hlink.NavigateUrl = "~/url2.aspx"
                hlink.Text = "url2"
            End If
        Next

    End Sub
*********************************************************************

Mira a ver si te sirve.

Ya me cuentas.

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #8 en: Lunes 11 de Junio de 2007, 10:05 »
0
Hola Javier:

He probado tu codigo, pero no funciona. Te pongo "mi traduccion" a C# a ver si hay algo que no este bien:

Código: Text
  1.         
  2.         foreach (DataListItem dli in DataList1)
  3.         {
  4.             HyperLink HLink = new HyperLink();
  5.             HLink.Target = dli.FindControl(&#34;Link&#34;).ToString();
  6.  
  7.             Label Etiqueta = new Label();
  8.  
  9.             Etiqueta.Text = dli.FindControl(&#34;Contenido&#34;).ToString();
  10.  
  11.             if (Etiqueta.Text == &#34;&#34;)
  12.             {
  13.                 HLink.NavigateUrl = &#34;~/url1.aspx&#34;;
  14.                 HLink.Text = &#34;URL1&#34;;
  15.             }
  16.             else
  17.             {
  18.                 HLink.NavigateUrl = &#34;~/url2.aspx&#34;;
  19.                 HLink.Text = &#34;URL2&#34;;
  20.             }
  21.         }
  22.  

El error que me da con este codigo es este:

foreach statement cannot operate on variables of type 'System.Web.UI.WebControls.DataList' because 'System.Web.UI.WebControls.DataList' does not contain a public definition for 'GetEnumerator'


A mi se me ha ocurrido otra solucion, lo que pasa es que me da un error que no se solucionar, este es el codigo:

Código: Text
  1.  
  2. &#60;ItemTemplate&#62;
  3.                 &#60;td style=&#34;width: 135px; text-align: center; padding-bottom: 20px&#34;&#62;
  4.                 
  5.                     &#60;%  
  6.                         string result = Eval(&#34;Contenido&#34;).ToString();
  7.                         if (result == &#34;&#34;)
  8.                             Session[&#34;Pagina&#34;] = &#34;url1.aspx?PestanaID={0}&#34;;
  9.                         else
  10.                             Session[&#34;Pagina&#34;] = &#34;url2.aspx?PestanaID={0}&#34;;
  11.                      %&#62;
  12.                                                       
  13.                     &#60;a href='&#60;%# Eval(&#34;idPestana&#34;, Session[&#34;Pagina&#34;].ToString()) %&#62;' runat=&#34;server&#34;&#62;
  14.                         &#60;img src='&#60;%# Eval(&#34;Imagen&#34;) %&#62;' alt=&#34;Imagen&#34; /&#62;
  15.                     &#60;/a&#62;
  16.                     
  17.                     &#60;br /&#62;
  18.                   
  19.                     &#60;span class = &#34;Titulo&#34;&#62;
  20.                         &#60;asp:Label ID=&#34;LabelTitulo&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Titulo&#34;) %&#62;'&#62;&#60;/asp:Label&#62;&#60;br /&#62;
  21.                     &#60;/span&#62;                                                  
  22.                 &#60;/td&#62;
  23.                 
  24.                 &#60;td style=&#34;width: 18px; margin-bottom: 30px&#34;&#62;&#60;/td&#62;                                
  25. &#60;/ItemTemplate&#62;
  26.  

El error que me da es este:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

Y no lo entinedo, ya que lo estoy usando dentro del ItemTemplate... cada registro del ItemTemplate no es un DataBound ??? ....

Muchas gracias por tu tiempo.

Un saludo.

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #9 en: Lunes 11 de Junio de 2007, 11:31 »
0
Hola Maxus,

Yo veo un par de cosillas en esos codigos.

Primero yo hago esto:

For Each item In DataList1.Items

y tu haces esto:

foreach (DataListItem dli in DataList1)

Yo comparo con los elemntos del datalist y tu compara con el datalist completo. No creo qeu lo puedas hacer asi, deberia de haber alguna manera para recorrer los elementos.

Segundo no se si todos los campos del itemtemplate seran databounds. Para verlo yo iria al diseño en lugar del codigo para ver si lo puedes hacer por ahi.

Como recomendacion primero probaria con lo del punto 1.

Saludos

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #10 en: Lunes 11 de Junio de 2007, 12:15 »
0
Muchisimas gracias, pero aun no consigo arreglar esto :(

he modificado el codigo y ahora el error es este:

Object reference not set to an instance of an object.

este es el codigo:

Código: Text
  1. foreach (DataListItem dli in DataList1.Items)
  2. {
  3.     HyperLink HLink = new HyperLink();
  4.     Label Etiqueta = new Label();
  5.  
  6.     Etiqueta.Text = dli.FindControl(&#34;Contenido&#34;).ToString();
  7.  
  8.     if (Etiqueta.Text == &#34;&#34;)
  9.     {
  10.         HLink.NavigateUrl = &#34;~/url1.aspx&#34;;
  11.         HLink.Text = &#34;URL1&#34;;
  12.     }
  13.     else
  14.     {
  15.         HLink.NavigateUrl = &#34;~/url2.aspx&#34;;
  16.         HLink.Text = &#34;URL2&#34;;
  17.     }
  18. }
  19.  

Y bueno, hay algo que no consigo entender... es ¿como se asigna el HyperLink a la imagen... ahora mismo no se esta haciendo ¿no?...

Y bueno, desde la vista de diseño si me aparece cada item como un databound....

MUCHAS GRACIAS AMIGO

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #11 en: Lunes 11 de Junio de 2007, 13:19 »
0
Hola Maxus,

Parece que se resiste el tema. A ver que al final sale.

He estado haciendo una prueba y a mi esto me funciona:

Pagina .aspx.cs

Código: Text
  1.  
  2. using System;
  3. using System.Data;
  4. using System.Configuration;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11.  
  12. public partial class _Default : System.Web.UI.Page
  13. {
  14.     protected void Page_Load(object sender, EventArgs e)
  15.     {
  16.         foreach (DataListItem dli in DataList1.Items)
  17.         {
  18.             Label Etiqueta = new Label();
  19.             HyperLink HLink = new HyperLink();
  20.             Etiqueta.Text = dli.FindControl(&#34;DestacadoLabel&#34;).ToString();
  21.                        
  22.             if (Etiqueta.Text == &#34;false&#34;)
  23.             {
  24.                 HLink.NavigateUrl = &#34;~/url1.aspx&#34;;
  25.                 HLink.Text = &#34;URL1&#34;;
  26.             }
  27.             else
  28.             {
  29.                 HLink.NavigateUrl = &#34;~/url2.aspx&#34;;
  30.                 HLink.Text = &#34;URL2&#34;;
  31.             }
  32.         }
  33.     }
  34. }
  35.  
  36.  

Pagina .aspx

Código: Text
  1.  
  2. &#60;%@ Page Language=&#34;C#&#34; AutoEventWireup=&#34;true&#34;  CodeFile=&#34;Default.aspx.cs&#34; Inherits=&#34;_Default&#34; %&#62;
  3.  
  4. &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62;
  5.  
  6. &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; &#62;
  7. &#60;head runat=&#34;server&#34;&#62;
  8.     &#60;title&#62;Untitled Page&#60;/title&#62;
  9. &#60;/head&#62;
  10. &#60;body&#62;
  11.     &#60;form id=&#34;form1&#34; runat=&#34;server&#34;&#62;
  12.     &#60;div&#62;
  13.         &#60;asp:AccessDataSource ID=&#34;AccessDataSource1&#34; runat=&#34;server&#34; DataFile=&#34;~/dbweb.mdb&#34;
  14.             SelectCommand=&#34;SELECT [Zona], [Metros], [Destacado] FROM [Inmueble]&#34;&#62;&#60;/asp:AccessDataSource&#62;
  15.         &#60;asp:DataList ID=&#34;DataList1&#34; runat=&#34;server&#34; DataSourceID=&#34;AccessDataSource1&#34;&#62;
  16.             &#60;ItemTemplate&#62;
  17.                 Zona:
  18.                 &#60;asp:Label ID=&#34;ZonaLabel&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Zona&#34;) %&#62;'&#62;&#60;/asp:Label&#62;&#60;br /&#62;
  19.                 Metros:
  20.                 &#60;asp:Label ID=&#34;MetrosLabel&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Metros&#34;) %&#62;'&#62;&#60;/asp:Label&#62;&#60;br /&#62;
  21.                 Destacado:
  22.                 &#60;asp:Label ID=&#34;DestacadoLabel&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Destacado&#34;) %&#62;'&#62;&#60;/asp:Label&#62;&#60;br /&#62;
  23.                 Link:
  24.                 &#60;asp:HyperLink ID=&#34;HyperLink1&#34; runat=&#34;server&#34;&#62;HyperLink&#60;/asp:HyperLink&#62;&#60;br /&#62;
  25.                 &#60;br /&#62;
  26.             &#60;/ItemTemplate&#62;
  27.         &#60;/asp:DataList&#62;&#60;/div&#62;
  28.     &#60;/form&#62;
  29. &#60;/body&#62;
  30. &#60;/html&#62;
  31.  
  32.  

Podrias decir exactamente en que linea te da le error. Es decir, que instruccion intentas ejecutar cuando te salta le error?

Saludos

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #12 en: Martes 12 de Junio de 2007, 10:35 »
0
Muchisimas gracias Javier Santamaria:

Te comento, la linea que me da el error es esta:

            Etiqueta.Text = dli.FindControl("Contenido").ToString();

En mi base de datos tengo varias tablas y a la que hago el SqlDataSource tiene estos campos:

            -idPestana
            -Titulo
            -Contenido
            -Imagen
            -PestanaID

Imaginemos que hago una consulta que me filtrara por PestanaID = 3, bien, el resultado "de ejemplo" seria algo asi:

Registro 1
------------
-idPestana = 53
-Titulo = Ejemplo1
-Contenido = NULL
-Imagen = /imagenes/ima1.jpg
-PestanaID = 3


Registro 2
------------
-idPestana = 65
-Titulo = Ejemplo2
-Contenido = NULL
-Imagen = /imagenes/ima2.jpg
-PestanaID = 3


Registro 3
------------
-idPestana = 91
-Titulo = Ejemplo3
-Contenido = "En este bello paisaje podemos contemplar como ...."
-Imagen = /imagenes/ima3.jpg
-PestanaID = 3


Registro 4
------------
-idPestana = 102
-Titulo = Ejemplo4
-Contenido = NULL
-Imagen = /imagenes/ima4.jpg
-PestanaID = 3


Registro 5
------------
-idPestana = 133
-Titulo = Ejemplo5
-Contenido = NULL
-Imagen = /imagenes/ima5.jpg
-PestanaID = 3


Bien, como sabes tengo 2 tipos de pagina "Pagina para pestañas" y "Pagina para Contenido". Ahora, esta consulta nos ha devuelto 3 registros "imaginarios" y el resultado hubiese quedado en una pagina tipo "Pagina para pestañas" Porque el resultado de la consulta eran mas pestañas... Solo que con una diferencia, ahora hay 5 registros, 4 apuntan a una pagina con mas pestañas y una apunta a una "Pagina para Contenido".

Yo antes los links los hacia con <a href>.... tu propones Hyperlink, el tema es que me gustaria que el link lo tubiese la imagen, es decir, que o bien fuese un imagebutton, o una imagen con un <a href> (en realidad no se me ocurren mas posibilidades).

Tengo una preguntilla. ¿el FindControl, busca el contenido del campo al que haces referencia dentro de la consulta realizada?

En serio, no se como darte las gracias por todo. A ver si no se nos resiste mas y cae este pequeño problema

Gracias a gente como tu, gente como yo salimos de agujeros :D

Muchas gracias de antemano Javier.

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #13 en: Martes 12 de Junio de 2007, 11:33 »
0
Hola de nuevo, prueba a crearte una aplicacion que simplemente te lea la BD y la meta en el datalist (como he hecho yo en el codigo que te he puesto).

De hecho puedes copiar ese codigo y cambiarle el datasource (en lugar de access haces uno de sql) y cambiar la consulta de seleccion por la que tu necesites.
Te dejo un ejemplo, pero probablemente lo tengas que adaptar (el ejemplo lo baso en el ultimo post). Te pongo los cambios en rojo:

Pagina .aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
   <title>Untitled Page</title>
</head>
<body>
   <form id="form1" runat="server">
   <div>


<asp:SqlDataSource ID="SqlDataSource1" runat="server" DataFile="Tu base de datos"
           SelectCommand="SELECT [idPestana], [Titulo], [Contenido], [Imagen], [PestanaID] FROM [Tu tabla]" WHERE [PestanaID=3]></asp:SqlDataSource>



<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
           <ItemTemplate>


               idPestana:
               <asp:Label ID="idPestanaLabel" runat="server" Text='<%# Eval("idPestana") %>'></asp:Label><br />
               Titulo:
               <asp:Label ID="TituloLabel" runat="server" Text='<%# Eval("Titulo") %>'></asp:Label><br />
               Contenido:
               <asp:Label ID="ContenidoLabel" runat="server" Text='<%# Eval("Contenido") %>'></asp:Label><br />
               Imagen:
               <asp:ImageButton ID="ImagenImageButton" runat="server"
Aqui tendras que poner el link de la imagen que quieres mostrar con imageurl></asp:ImageButton><br />





               <br />
               PestanaID:
               <asp:Label ID="PestanaIDLabel" runat="server" Text='<%# Eval("PestanaID") %>'></asp:Label><br />



           </ItemTemplate>
       </asp:DataList></div>
   </form>
</body>
</html>


Pagina .aspx.cs


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
       foreach (DataListItem dli in DataList1.Items)
       {
           Label Etiqueta = new Label();



           Etiqueta.Text = dli.FindControl("ContenidoLabel").ToString();
ImageButton Imagen
Imagen.imageurl =dli.FindControl("ImagenImageButton").imageurl;




           if (Etiqueta.Text == "")
           {
               Lo que quieras hacer"
           }
           else
           {
               Lo que quieras hacer"
           }
       }
   }
}


El FindControl lo que hace es buscarte el control (elemento) que tu le especificas entre parentesis dentro del elemento que le indicas (en tu caso el datalist). Y te devuelve todas las propiedades de ese control para que puedas trabajas con ellas.

Lo de las imagenes creo que con un imagebutton tienes suficiente. Me gusta mas el control web qeu el HTML clasico.

Si te sale haciendolo poco a poco luego intenta integrarlo en tu aplicacion, pero primero prueba con una aplicacion de prueba.  :comp:  :comp:

Saludos

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #14 en: Martes 12 de Junio de 2007, 12:36 »
0
Es muy curioso esto.... en fin... no llego a entenderlo.

mira, este es el codigo del CS:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        foreach (DataListItem dli in DataList1.Items)
        {
            Label Etiqueta = new Label();            
            Etiqueta.Text = dli.FindControl("ContenidoLabel").ToString();

            ImageButton Imagen = new ImageButton();
            Imagen.ImageUrl = dli.FindControl("ImagenImageButton").ToString();

            if ((Etiqueta.Text == "") || (Etiqueta.Text == null))
            {
                Imagen.PostBackUrl = "~/url1.aspx";
            }
            else
            {
                Imagen.PostBackUrl = "~/url2.aspx";
            }
        }
    }
}


y este el del ASPx

    <body>
        <form id="form1" runat="server">
            <div>
           
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
                SelectCommand="SELECT [idPestana], [Titulo], [Contenido], [Imagen], [PestanaID] FROM [Pestanas] WHERE PestanaID = 3">
            </asp:SqlDataSource>



            <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" RepeatColumns="5" RepeatDirection="Horizontal">
                <ItemTemplate>
                    idPestana:
                    <asp:Label ID="idPestanaLabel" runat="server" Text='<%# Eval("idPestana") %>'></asp:Label><br />
                    Titulo:
                    <asp:Label ID="TituloLabel" runat="server" Text='<%# Eval("Titulo") %>'></asp:Label><br />
                    Contenido:
                    <asp:Label ID="ContenidoLabel" runat="server" Text='<%# Eval("Contenido") %>'></asp:Label><br />
                    Imagen:
                    <asp:ImageButton ID="ImagenImageButton" runat="server" ></asp:ImageButton><br />
                    <br />
                    PestanaID:
                    <asp:Label ID="PestanaIDLabel" runat="server" Text='<%# Eval("PestanaID") %>'></asp:Label><br />
                </ItemTemplate>
            </asp:DataList>
                <asp:ImageButton ID="ImageButton1" runat="server" /></div>
    </form>
    </body>


Lo que no entiendo es porque a la hora de hacer la busqueda en el foreach... tengo que poner en el el FindControl ContenidoLabel ¿no seria Contenido?.... si pongo Contenido, me da el error de antes... y sino, pues no da error.

la parte donde digo esto:

            ImageButton Imagen = new ImageButton();
            Imagen.ImageUrl = dli.FindControl("ImagenImageButton").ToString();

No hace lo que tiene que hacer... es decir, coger el valor del campo de la base de datos "Imagen" y ponerselo a Imagen.ImageUrl.... Perdona por mi ignorancia, pero es que no entiendo nada esto que esta pasando...

Prove con tu codigo

            ImageButton Imagen = new ImageButton();
            Imagen.ImageUrl = dli.FindControl("ImagenImageButton").ImageUrl;

Pero no aparece esa propiedad en el control ImagenImageButton.... asi que... pense en hacerle un ToString ... pero el resultado no es lo que espero.

En serio, perdona por mi ignorancia y a ver si conseguimos sacar esto.

Un millon de gracias.

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #15 en: Martes 12 de Junio de 2007, 12:57 »
0
Hola Maxus, ya estamos mas cerca.

Dos cosilas:

1. Esto te funciona:

Código: Text
  1.  
  2. Etiqueta.Text = dli.FindControl(&#34;ContenidoLabel&#34;).ToString();
  3.  
  4.  

y esto no:

Código: Text
  1.  
  2.  Etiqueta.Text = dli.FindControl(&#34;Contenido&#34;).ToString();
  3.  
  4.  

Porque cuando declaras el datalist en la pagina.aspx lo haces asi:

Código: Text
  1.  
  2.  Contenido:
  3. &#60;asp:Label ID=&#34;ContenidoLabel&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Contenido&#34;) %&#62;'&#62;&#60;/asp:Label&#62;
  4.  
  5.  

Donde Contenido: es basicamente un literal, es decir, son solo letras; y <asp:Label ID="ContenidoLabel" runat="server" Text='<%# Eval("Contenido") %>'></asp:Label> es la label qeu te carga los datos de la BD. Si te fijas en el ID de la label dice "ContenidoLabel". Por eso lo tienes que hacer referencia (en dli.FindControl("Contenido")) como contenidolabel y no como contenido.

Espero que te aclares

2. Para solucionar el tema de la imagen yo haria esto:

Pagina .aspx
Código: Text
  1.  
  2. Imagen:
  3. &#60;asp:ImageButton ID=&#34;ImagenImageButton&#34; runat=&#34;server&#34; &#62;&#60;/asp:ImageButton&#62;&#60;br /&#62;
  4. &#60;br /&#62;
  5. &#60;asp:Label ID=&#34;RutaImagenLabel&#34; runat=&#34;server&#34; Text='&#60;%# Eval(&#34;Imagen&#34;) %&#62;' Visible=&#34;False&#34;&#62;&#60;/asp:Label&#62;
  6.  
  7.  

Pagina .aspx.cs
Código: Text
  1.  
  2.  foreach (DataListItem dli in DataList1.Items)
  3. {
  4. Label Etiqueta = new Label();
  5. Etiqueta.Text = dli.FindControl(&#34;ContenidoLabel&#34;).ToString();
  6.  
  7. ImageButton Imagen = new ImageButton();
  8. Imagen.ImageUrl = dli.FindControl(&#34;ImagenImageButton&#34;).ImageUrl;
  9.  
  10. Label Ruta = new Label();
  11. Ruta.text = dli.FindControl(&#34;RutaImagenLabel&#34;).text;
  12.  
  13. if ((Etiqueta.Text == &#34;&#34;) || (Etiqueta.Text == null))
  14. {
  15. Imagen.PostBackUrl = &#34;pagina sin contenido&#34;;
  16. }
  17. else
  18. {
  19. Imagen.PostBackUrl = &#34;Pagina con contenido&#34; (supongo que ruta.text);
  20. }
  21. }
  22.  
  23.  


A ver si de esta solucionamos el problema.

Saludos

Maxus

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #16 en: Martes 12 de Junio de 2007, 15:02 »
0
Lo he conseguido :o

Asi que .. MUCHISSISISISISSMAS GRACIAS TIO

lo he hecho igual que decias tu pero con el evento ItemDataBound

JODER

MUCHAS MUCHAS MUCHAS GRACIAS

Javier Santamaria

  • Miembro MUY activo
  • ***
  • Mensajes: 142
    • Ver Perfil
Re: Lanzar Una Pagina Con Condicion
« Respuesta #17 en: Martes 12 de Junio de 2007, 15:21 »
0
Me alegro, nos vemos en otra.

Saludos