2013-04-30 1 views
0

Я добавил новое свойство boolean в свой класс профиля.Как установить значение по умолчанию для нового свойства профиля для существующих пользователей в ASP.NET?

Я не могу найти способ, однако, чтобы его значение было истинным по умолчанию.

Profile.ShowDocumentsNotApplicable 

возвращает ложь, если явно не установлен верно ...

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(); 
     } 
    } 
} 

ответ

1

С логическими свойствами, вы часто обнаруживают, что они могут быть выражены в любом случае. Я считаю, что наилучшей практикой является их использование в зависимости от того, какой путь делает «ложным» значение по умолчанию. Итак, если по умолчанию вы хотите, чтобы значение Profile.ShowDocumentsNotApplicable было истинным, тогда я бы назвал его Profile.HideDocumentsNotApplicable, для которого значение по умолчанию - false. Причиной этого является то, что компилятор устанавливает uninitialised bools в false; имеет смысл иметь значения по умолчанию вашей логики, соответствующие значениям по умолчанию для компилятора.

Если обратное меньше подходит (например, вы всегда используете !Profile.HideDocumentsNotApplicable и вы это снижает читаемость), то вы можете сделать следующее:

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

    //other stuff... 
} 
Смежные вопросы