Il problema con la risposta di @Robin Day è che il seguente codice ha esito negativo se si dispone di figli del database che possono o non possono avere dati dati lo stato corrente di ciò che si sta visualizzando. A volte è difficile manovrare intorno al codice del databound annullabile se si dispone di un grafico di oggetti complessi.
Ad esempio, si consideri:
<asp:PlaceHolder runat="server" Visible="<%# VisibleCondition() %>">
<%# ((string)null).ToString("c") %> //an object that may have null data
//given the visible condition
</asp:PlaceHolder>
Se VisibleCondition()
rendimenti false
, bambino controlla ancora vengono chiamati con DataBind()
che può risultare in un NullReferenceException
nell'esempio di cui sopra.
Ecco un approccio migliore, secondo me:
public class ConditionalPlaceHolder : PlaceHolder
{
protected override void DataBindChildren()
{
if(this.Visible)
{
base.DataBindChildren();
}
}
}
e utilizzata nel modo seguente:
<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>
fonte
2011-07-09 10:44:46
L'EDIT è un suggerimento davvero utile. Grazie. –