Вопрос

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

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

Пример:

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

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

Спасибо!

Это было полезно?

Решение

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

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; }
}

Другие советы

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

[DefaultValue(false)]

не будет присваивать атрибуту значение false.Видишь: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx.В нем говорится:

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

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

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

class myControl
{
    private bool _showBox = true;

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

Необязательно, вы можете добавить атрибут DefaultValueAttribute для конструктора.

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

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

  public bool ShowBox { get; set; }
}  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top