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!

È stato utile?

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; }
}  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top