2013-04-30 1 views
0

J'ai ajouté une nouvelle propriété booléenne à ma classe de profil.Comment définir une valeur par défaut pour une nouvelle propriété de profil pour les utilisateurs existants dans ASP.NET?

Je n'arrive pas à trouver un moyen d'avoir sa valeur par défaut.

Profile.ShowDocumentsNotApplicable 

renvoie false lorsqu'ils ne sont pas explicitement la valeur true ...

contenu web.config:

<!-- snip --> 
<profile inherits="Company.Product.CustomerProfile"> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/" /> 
    </providers> 
</profile> 
<!-- snap --> 

CustomerProfile:

public class CustomerProfile: ProfileBase 
{ 
    private bool _showDocumentsNotApplicable = true; 

    public bool ShowDocumentsNotApplicable 
    { 
     get { return Return("ShowDocumentsNotApplicable", _showDocumentsNotApplicable); } 
     set { Set("ShowDocumentsNotApplicable", value,() => _showDocumentsNotApplicable = value); } 
    } 

    private T Return<T>(string propertyName, T defaultValue) 
    { 
     try 
     { 
      return (T)base[propertyName]; 
     } 
     catch (SettingsPropertyNotFoundException) 
     { 
      return defaultValue; 
     } 
    } 

    private void Set<T>(string propertyName, T setValue, System.Action defaultAction) 
    { 
     try 
     { 
      base[propertyName] = setValue; 
     } 
     catch (SettingsPropertyNotFoundException) 
     { 
      defaultAction(); 
     } 
    } 
} 

Répondre

1

Avec des propriétés booléennes, vous trouvent souvent qu'ils peuvent être exprimés dans les deux sens. Je considère qu'il est préférable de les avoir, quelle que soit la façon, qui rend "faux" le défaut. Donc, si par défaut vous voulez que Profile.ShowDocumentsNotApplicable soit vrai, alors je l'appellerais Profile.HideDocumentsNotApplicable, pour lequel la valeur par défaut est false. Le raisonnement derrière ceci est que le compilateur place les bools non initialisés à faux; Il est logique que les valeurs par défaut de votre logique correspondent aux valeurs par défaut du compilateur.

Si l'inverse est moins adapté (par exemple, vous êtes toujours en utilisant !Profile.HideDocumentsNotApplicable et vous trouverez ce qui réduit la lisibilité), vous pouvez alors effectuer les opérations suivantes:

public class CustomerProfile: ProfileBase 
{ 
    private bool _hideDocumentsNotApplicable; 
    public bool ShowDocumentsNotApplicable 
    { 
     get { return !_hideDocumentsNotApplicable); } 
     set { _hideDocumentsNotApplicable = !value); } 
    } 

    //other stuff... 
} 
Questions connexes