Как установить значение по умолчанию для нового свойства профиля для существующих пользователей в 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...
}