Question

J'ai un UserControl avec quelques propriétés booléennes. Je voudrais qu'ils soient définis sur true par défaut s'ils ne sont pas définis explicitement dans la page .aspx, ou du moins qu'ils soient forcés à être déclarés s'il n'existe aucun moyen de définir un paramètre par défaut. Je sais qu'il existe un moyen de le faire car de nombreux contrôles ont des propriétés requises qui cassent votre application lorsque vous essayez de l'exécuter et elles ne sont pas déclarées.

Comment puis-je faire cela?

Exemple:

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

Je souhaite que le système casse ou que la valeur par défaut soit définie sur "true". si showBox est omis de cette déclaration.

Merci!

Était-ce utile?

La solution

Définissez vos propriétés avec leurs valeurs par défaut, comme suit:

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

ou dans le constructeur de votre contrôle, définissez les valeurs par défaut:

public MyControl()
{
    _ShowBox = false;
}

ou lève une exception si elle n'est pas affectée:

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

Autres conseils

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 provoque pas l'initialisation automatique d'un membre avec la valeur de l'attribut. Vous devez définir la valeur initiale dans votre code. & Quot;

Cet attribut sert uniquement à indiquer dans Visual Studio Designer ce que vous considérez comme une valeur par défaut. Si une personne utilisant votre contrôle modifie cette valeur, elle sera affichée en gras pour indiquer que cette valeur n'est pas définie par défaut.

Il suffit de définir la valeur par défaut souhaitée lors de la déclaration d'une variable:

class myControl
{
    private bool _showBox = true;

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

Facultatif, vous pouvez ajouter le DefaultValueAttribute for designer.

ReSharper recommande d'utiliser une propriété auto et de définir la valeur par défaut dans le constructeur, comme suit:

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

  public bool ShowBox { get; set; }
}  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top