El problema con la respuesta de @Robin Day es que el siguiente código falla si tiene hijos con conexión de datos que pueden o no tener datos dado el estado actual de lo que esté representando. A veces es difícil maniobrar en torno al código de enlace de datos anulables si tiene un gráfico de objeto complejo.
Por ejemplo, considere:
<asp:PlaceHolder runat="server" Visible="<%# VisibleCondition() %>">
<%# ((string)null).ToString("c") %> //an object that may have null data
//given the visible condition
</asp:PlaceHolder>
Si VisibleCondition()
vuelve false
, niño aún controla ser llamado con DataBind()
lo cual puede resultar en una NullReferenceException
en el ejemplo anterior.
Aquí es un mejor enfoque, en mi humilde opinión:
public class ConditionalPlaceHolder : PlaceHolder
{
protected override void DataBindChildren()
{
if(this.Visible)
{
base.DataBindChildren();
}
}
}
y utiliza de la siguiente manera:
<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition1() %>">
//whatever databound code
<%# ((string)notNullGivenVisibleCondition1).ToString() %>
<p>But could be given visible condition 2</p>
</web:ConditionalPlaceHolder>
<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition2() %>">
//whatever databound code
<%# ((string)notNullGivenVisibleCondition2).ToString() %>
<p>But could be given visible condition 1</p>
</web:ConditionalPlaceHolder>
El EDIT es un consejo realmente útil. Gracias. –