UserControl Valore predefinito nella proprietà
-
03-07-2019 - |
Domanda
Ho un UserControl con alcune proprietà booleane. Vorrei che fossero impostati su true per impostazione predefinita se non impostati esplicitamente nella pagina aspx, o almeno forzarli a essere dichiarati se non c'è modo di impostare un valore predefinito. So che c'è un modo per farlo perché molti controlli hanno richiesto proprietà che interrompono l'app quando provi a eseguirla e non vengono dichiarate.
Come posso farlo?
Esempio:
<je:myControl runat="server" id="myControl" showBox="False">
Voglio che il sistema si rompa o imposti il ??valore predefinito su " true " se showBox è escluso da questa dichiarazione.
Grazie!
Soluzione
Definisci le tue proprietà con i loro valori predefiniti in questo modo:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
}
o nel costruttore del controllo, imposta i valori predefiniti:
public MyControl()
{
_ShowBox = false;
}
o genera un'eccezione se non è assegnato:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
get { return _ShowBox; }
}
Altri suggerimenti
So di essere in ritardo, ma volevo solo menzionarlo
[DefaultValue(false)]
NON imposterà l'attributo su false. Vedi: http://msdn.microsoft.com/en-us /library/system.componentmodel.defaultvalueattribute.aspx . Dice:
" Un DefaultValueAttribute non causerà l'inizializzazione automatica di un membro con il valore dell'attributo. Devi impostare il valore iniziale nel tuo codice. & Quot;
Questo attributo serve solo a indicare in Visual Studio Designer quello che consideri un valore predefinito. Se qualcuno che utilizza il tuo controllo modifica questo valore, verrà visualizzato grassetto per segnalare che questo valore non è predefinito.
Basta impostare il valore predefinito desiderato, quando si dichiara una variabile:
class myControl
{
private bool _showBox = true;
[PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
public bool showBox
{
get { return _showBox; }
set { _showBox = value; }
}
}
Opzionale è possibile aggiungere DefaultValueAttribute per designer.
ReSharper consiglia di utilizzare una proprietà automatica e di impostare il valore predefinito nel costruttore, in questo modo:
public class MyControl
{
public MyControl()
{
ShowBox = true;
}
public bool ShowBox { get; set; }
}