Uno La solución es envolver el contenido en una etiqueta runat = "server" con un valor visible, por ejemplo,
<div runat="server" Visible='<%# Eval("SaveDate") != DBNull.Value %>'>
do magic
</div>
div
puede ser cualquier etiqueta HTML, pero <asp:Panel>
y <asp:PlaceHolder>
también se pueden usar. Tenga en cuenta que "do magic" sigue vinculado a los datos, por lo que no es una solución perfecta si contiene código o código caro que podría generar un error si Eval("SaveDate") == DBNull.Value
.
Tenga en cuenta que Visible="false"
omitiremos la etiqueta y todo su contenido desde el HTML generado, esto significa que es muy diferente de style="display:none"
o style="visible:hidden"
, por lo que no se preocupe por eso.
Pero, si su "hacer magia" es, otra solución razonablemente complejo bastante simple (un poco de un truco) es: utilizar un repetidor (o FormView) con su origen de datos se establece en una matriz de un elemento (visible) o artículos (ocultos):
<asp:Repeater runat="server" DataSource='<%# ElementIfTrue(Eval("SaveDate") != DBNull.Value) %>'
<ItemTemplate>
do magic
</ItemTemplate>
</asp:Repeater>
protected IEnumerable ElementIfTrue(bool condition)
{
if (condition)
return new object[] { Page.GetDataItem() };
else
return new object[0];
}
los contenidos reales de la matriz fuente de datos está vacío (oculto) o el elemento que ya eran vinculantes a. Esto asegura que todavía puede llamar al <%# Eval(...) %>
dentro de ItemTemplate.
Con este enfoque, su "hacer magia" es una plantilla que solo se ejecutará si DataSource tiene uno o más elementos. El cual es atendido por ElementIfTrue
. Es un poco emocionante, pero puede salvarte de vez en cuando.
Como nota al margen: empaquetar su "magia" en un control de usuario también puede mantener la complejidad baja. Realmente no necesita cambiar nada en su combinación de etiquetas HTML/ASP.NET (<%# Eval("...") %>
aún funciona incluso dentro de un control de usuario).
Utilizo este código en el repetidor, por lo que no puedo usar marcadores de posición ni ninguna ID del código. –
FYI: No puedo usar la pantalla: ninguno, ya que Google indexa el texto que está oculto en la pantalla none block. No puedo usar Visible = false, ya que es un repetidor y no puedo usar ID. Podría ocultarlo solo mediante el uso de la declaración if. –
Puede enlazar datos a Visible, es una propiedad en cada control del lado del servidor. Simplemente intente '