2009-05-04 6 views
13

J'ai un UserControl avec quelques propriétés booléennes. Je voudrais qu'ils aient la valeur true par défaut s'ils ne sont pas définis explicitement dans la page .aspx, ou au moins les forcer à être déclarés s'il n'y a aucun moyen de définir un défaut. Je sais qu'il existe un moyen de faire cela parce que beaucoup de contrôles ont besoin de propriétés qui cassent votre application lorsque vous essayez de l'exécuter et qu'elles ne sont pas déclarées.UserControl Valeur par défaut dans la propriété

Comment faire?

Exemple:

<je:myControl runat="server" id="myControl" showBox="False"> 

Je veux que le système soit briser ou définir la valeur par défaut « true » si showBox est laissé hors de cette déclaration.

Merci!

Répondre

20

Définissez vos propriétés avec leurs valeurs par défaut comme ça:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
} 

ou dans votre constructeur de contrôle, définir des valeurs par défaut:

public MyControl() 
{ 
    _ShowBox = false; 
} 

ou exception throw si elle est pas affecté:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
    get { return _ShowBox; } 
} 
+0

merci! c'est parfait – Jason

+0

'if (_ShowBox == null) {' peut être vrai parce que vous ne pourrez pas mettre un bool à null. – Peter

+0

Quoi? vérifier bool avec null retournera toujours faux !!!! – Yuki

2

Il suffit de définir la valeur par défaut souhaitée, en déclarant une variable:

class myControl 
{ 
    private bool _showBox = true; 

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)] 
    public bool showBox 
    { 
     get { return _showBox; } 
     set { _showBox = value; } 
    } 
} 

En option vous pouvez ajouter le DefaultValueAttribute pour le designer.

24

Je sais que je suis en retard mais je voulais juste mentionner que

[DefaultValue(false)] 

ne définira pas l'attribut sur false. Voir: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Il dit:

« Un DefaultValueAttribute ne causera pas un membre à initialiser automatiquement la valeur de l'attribut Vous devez définir la valeur initiale dans votre code. ».

Cet attribut indique uniquement dans Visual Studio Designer ce que vous considérez comme une valeur par défaut. Si quelqu'un utilisant votre contrôle change cette valeur, il affichera en gras pour indiquer que cette valeur n'est pas par défaut.

2

ReSharper recommande l'utilisation d'un auto-propriété et le réglage de la valeur par défaut dans le constructeur, comme suit:

public class MyControl 
{ 
    public MyControl() 
    { 
    ShowBox = true; 
    } 

    public bool ShowBox { get; set; } 
}