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

Я добавил новое логическое свойство в свой класс профиля.

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

Profile.ShowDocumentsNotApplicable

возвращает false, если явно не установлено значение true...

Содержание 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 -->

Профиль клиента:

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. Причиной этого является то, что компилятор устанавливает неинициализированные bools в false; имеет смысл иметь значения по умолчанию вашей логики, совпадающие со значениями по умолчанию компилятора.

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

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

    //other stuff...
}
Другие вопросы по тегам