UserControl Значение по умолчанию в свойстве - PullRequest
14 голосов
/ 04 мая 2009

У меня есть UserControl с несколькими логическими свойствами. Я хотел бы, чтобы они были установлены в true по умолчанию, если они не установлены явно на странице .aspx, или, по крайней мере, принудительно объявляли их, если нет способа установить значение по умолчанию. Я знаю, что есть способ сделать это, потому что многие элементы управления имеют обязательные свойства, которые нарушают работу вашего приложения, когда вы пытаетесь запустить его, и они не объявлены.

Как мне это сделать?

Пример:

<je:myControl runat="server" id="myControl" showBox="False">

Я хочу, чтобы система либо сломалась, либо установила значение по умолчанию "true", если showBox исключено из этого объявления.

Спасибо!

Ответы [ 4 ]

26 голосов
/ 26 января 2011

Я знаю, что опоздал, но я просто хотел упомянуть, что

[DefaultValue(false)]

НЕ установит атрибут на false. См .: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Там написано:

"DefaultValueAttribute не приведет к автоматической инициализации элемента со значением атрибута. Вы должны установить начальное значение в своем коде."

Этот атрибут служит только для указания в Visual Studio Designer того, что вы считаете значением по умолчанию. Если кто-то, использующий ваш элемент управления, изменит это значение, оно будет отображаться жирным шрифтом , чтобы указать, что это значение не является значением по умолчанию.

20 голосов
/ 04 мая 2009

Определите ваши свойства с их значениями по умолчанию, например:

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 голосов
/ 08 августа 2013

ReSharper рекомендует использовать авто-свойство и установить значение по умолчанию в конструкторе, например так:

public class MyControl
{
  public MyControl()
  {
    ShowBox = true;
  }

  public bool ShowBox { get; set; }
}  
2 голосов
/ 04 мая 2009

Просто установите желаемое значение по умолчанию при объявлении переменной:

class myControl
{
    private bool _showBox = true;

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
    public bool showBox
    {
        get { return _showBox; }
        set { _showBox = value; }
    }
}

Дополнительно вы можете добавить атрибут DefaultValueAttribute для дизайнера.

...