Tengo una página ASP.NET que usa un repetidor anidado dentro de otro repetidor para generar una lista de datos. Es el efecto de los siguientes:¿Cómo puedo ocultar un repetidor en ASP.NET C# si el DataSource no contiene elementos?
<asp:Repeater>
<ItemTemplate>
<span><%#Eval("Data1") %></span>
<!-- and many more -->
<asp:Repeater DataSource='<%#Eval("Data2")%>'>
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><%#Container.DataItem%></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
En el (C#) de código subyacente que estoy básicamente usando LINQ para tirar de una lista de información de un documento XML y se unen esa información para el primer repetidor.
Buscando la respuesta a esto, parece que el método es determinar si los datos para el repetidor anidado están vacíos. Si es así, entonces establece la visibilidad del repetidor en falso.
Desafortunadamente, no he podido determinar cómo hacerlo en línea, y no en el código subyacente (ya que no necesariamente funcionará para lo que estoy haciendo).
Como mis páginas no son validadas ahora, porque la UL termina vacía para cualquier elemento sin Data2, y porque me gustaría seguir usando una lista desordenada, busco su ayuda.
¿Alguna idea?
Gracias!
ACTUALIZACIÓN:
Si ayuda, ya que podría muy bien ser posible hacerlo en el código subyacente, el LINQ es algo a este efecto:
var x = from y in z
select new {
Data1 = d,
// etcetera
Data2 = (from j in k
where j.Value != String.Empty
select j.Value).ToList()
};
blah.DataSource = x;
blah.DataBind();
que está en el código subyacente no ... "en línea", como él pidió. Estaba a punto de decir lo mismo, luego leí un poco más cerca :) –
En caso de que sea posible, he agregado el LINQ a la pregunta original. –