Значение по умолчанию UserControl в свойстве
У меня есть UserControl с несколькими булевыми свойствами. Я бы хотел, чтобы они были установлены в true по умолчанию, если не заданы явно на странице .aspx или, по крайней мере, вынуждают их объявляться, если нет способа установить значение по умолчанию. Я знаю, что есть способ сделать это, потому что у многих элементов управления требуются свойства, которые нарушают ваше приложение, когда вы пытаетесь запустить его, и они не объявлены.
Как это сделать?
Пример:
<je:myControl runat="server" id="myControl" showBox="False">
Я хочу, чтобы система либо разбивала, либо устанавливали по умолчанию значение "true", если showBox не указано в этом объявлении.
Спасибо!
Ответы
Ответ 1
Определите свои свойства с их значениями по умолчанию:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
}
или в вашем конструкторе управления задайте значения по умолчанию:
public MyControl()
{
_ShowBox = false;
}
или передать исключение, если оно не назначено:
private bool _ShowBox = false;
public bool ShowBox
{
set { _ShowBox = value; }
get { return _ShowBox; }
}
Ответ 2
Я знаю, что опаздываю, но я просто хотел упомянуть, что
[DefaultValue(false)]
НЕ присваивает атрибуту значение false. Смотрите: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. В нем говорится:
"A DefaultValueAttribute не приведет к автоматическому инициализации элемента с помощью значения атрибута. Вы должны установить начальное значение в своем коде".
Этот атрибут должен указывать только в Visual Studio Designer, что вы считаете значением по умолчанию. Если кто-то, использующий ваш элемент управления, изменит это значение, он отобразит жирный, чтобы сообщить, что это значение не является стандартным.
Ответ 3
Просто установите желаемое значение по умолчанию при объявлении переменной:
class myControl
{
private bool _showBox = true;
[PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
public bool showBox
{
get { return _showBox; }
set { _showBox = value; }
}
}
Дополнительно вы можете добавить атрибут DefaultValueAttribute для конструктора.
Ответ 4
ReSharper рекомендует использовать свойство auto-property и устанавливать значение по умолчанию в конструкторе, например:
public class MyControl
{
public MyControl()
{
ShowBox = true;
}
public bool ShowBox { get; set; }
}