Значение по умолчанию 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; }
}