2009-08-21 38 views
6

<asp:Repeater> me está volviendo loco ..¿Cómo puedo hacer una sentencia if dentro de un repetidor

tengo que hacer

<ItemTemplate> 
    <% if (Container.DataItem("property") == "test") {%> 
     I show this HTML 
    <% } else { %> 
     I show this other HTML 
    <% } %> 
</ItemTemplate> 

Pero no puedo por la vida de mí encontrar alguna manera de hacer eso pasa. Ternary no sirve de nada, porque la cantidad de HTML es bastante grande, configurar las etiquetas a través de un evento DataBind tampoco es muy bueno, ya que tendría que tener grandes bloques de HTML en el código subyacente.

Seguramente hay una manera de hacer esto ....

+4

En su sentencia if está utilizando una asignación, no un operador de igualdad ... ¿se trata de un error tipográfico o de cómo es su código real? –

Respuesta

7

Usted podría intentar crear una especie de modelo de vista de clase, hacer la decisión sobre su código subyacente, y luego fuera feliz con su repetidor, simplemente mostrar los datos que se está dando.

Esta es una forma de separar la lógica de la IU. A continuación, puede tener una interfaz de usuario tonta que simplemente muestra datos, sin tener que decidir qué/cómo mostrar.

+1

Creo que este es el quid de la cuestión, tener los datos totalmente limpios antes de usar un repetidor. Sin embargo, la vida estaría bien si pudieras usar comparadores básicos en el repetidor. – Monsters

3

Se puede hacer esto con controles de usuario:

<ItemTemplate> 
    <uc:Content1 runat='server' id='content1' visible='<%# Container.DataItem("property") == "test" %>'/> 
    <uc:Content2 runat='server' id='content2' visible='<%# Container.DataItem("property") != "test" %>'/> 
</ItemTemplate> 
+1

Sí, pensé en hacer eso, funcionaría, pero un poco de una solución alternativa. He decidido que el repetidor simplemente no está listo para la tarea, y me he ido para un bucle for/next, funciona como un regalo. – Monsters

3

Parece que tengo esta mezclado con el enlace de datos reales

Puede hacerlo de esta manera:

<asp:Repeater runat="server"> 
    <ItemTemplate>  
     <% if (((Product)Container.DataItem).Enabled) { %> 
     buy it now! 
     <% } else {%> 
     come back later! 
     <% } %> 
    </ItemTemplate> 
</asp:Repeater> 

+0

Container.dataitem solo existe en la ... variable? marcado, p. <% # – Monsters

+0

Tienes razón, pensé que recordaba haber hecho algo así y ahora que estoy mirando mi código, era lógico en valores sin datos. –

19

Y Podría usar la visibilidad del lado del servidor:

<ItemTemplate> 
    <div runat="server" visible='<% (Container.DataItem("property") == "test") %>'> 
     I show this HTML 
    </div> 
    <div runat="server" visible='<% (Container.DataItem("property") != "test") %>'> 
     I show this other HTML 
    </div> 
</ItemTemplate> 
+0

Esta es una solución bastante buena en realidad. – Monsters

+0

esta es una buena solución si la lógica de decisión va a ser definida y utilizada por los frontend que _no tiene_ acceso al código C# subyacente. – mslot

+0

El HTML se procesará dos veces ... simplemente porque tiene visible no significa que el compilador omitirá esa sección del código –

0

Tuve un problema similar y tropecé con esta página. Gracias por las excelentes respuestas, Gavin y Keltex me pusieron en el camino correcto, pero tuve un momento difícil para que esto funcionara en mi página. En última instancia, yo era capaz de conseguir que funcione con este booleano, así que quería compartir para la posteridad:

casilla Mostrar si es falso

<asp:CheckBox ID="chk_FollowUp" Visible='<%# (DataBinder.Eval(Container.DataItem, "FollowUp").ToString() == "False") %>' runat="server" /> 

Mostrar img Bandera de ser cierto

<asp:Image ID="img_FollowUp" AlternateText="Flagged" ImageUrl="Images/flag.gif" runat="server" 
    Visible='<%# DataBinder.Eval(Container.DataItem, "FollowUp") %>' Height="30" Width="30" /> 
+0

oh, y alternar entre ellos con: '((CheckBox) remitente) .NamingContainer.FindControl ("chk_FollowUp"). Visible = falso; ((CheckBox) remitente) .NamingContainer.FindControl ("img_FollowUp"). Visible = true; ' – RJB

0

Primero debe definir una variable de conteo en su archivo Page.cs

<%if (Count == 0) 
         { 
          %> 
        <div style="background-color:#cfe9ed" class="wid_100 left special_text"><%# Eval("CompanyName") %></div> 
         <%} 
         else if (Count == TotalCount - 1) 
         { 
          %> 
         <div style="background-color:#f2f1aa" class="wid_100 left special_text"><%# Eval("CompanyName") %></div> 
         <%} 
         else 
         { 
           %> 
         <div class="wid_100 left special_text"><%# Eval("CompanyName") %></div><% } %> 
         <%Count++; %> 
Cuestiones relacionadas