пользовательский элемент управления со значением NULL, которое имеет значение по умолчанию - PullRequest
3 голосов
/ 10 февраля 2011

Я могу создать пользовательский элемент управления со значением по умолчанию:

private bool exclue = false;
public bool Exclude { get { return exclue; } set { exclue = value; } }

Я могу создать то же самое с помощью свойства nullable:

private EntityStatuses? status = EntityStatuses.Active;
public EntityStatuses? Status { get { return status; } set { status = value; } }

Но как я могу тогда установитьсвойство null в разметке при использовании пользовательского элемента управления?

<MyControls:Control ID="Con" runat="server" Status="?" >

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Существует обходной путь (с ограничением) для свойства Nullable, который должен быть установлен в нуль в разметке.

К сожалению, <%= %> не будет работать в случае нулевого значения, потому что строковое значение свойства в элементе управления сервера оценивается и анализируется до его желаемого типа (только простое значение, а не выражение). Но это должно работать с конструкцией привязки данных:

<MyControls:Control ID="Con" runat="server" Status="<%#(EntityStatuses?)null %>">

Теперь проблема: при использовании выражения привязки данных необходимо выполнить метод DataBind() либо на самом элементе управления, либо на всей странице. Самый простой способ - убедиться, что метод вашего элемента управления DataBind() вызван.

Итак, это обходной путь только с ограничениями.

0 голосов
/ 10 февраля 2011

Используйте два свойства с разными типами:

<MyControls:Control runat="server" StatusString="Active" />

public string StatusString // string! because all values in markup are strings
{
    set
    {
        EntityStatuses s;
        if (Enum.TryParse(value, out s))
            this.status = s; // local variable
    }
}

public EntityStatuses Status
{
    get { return this.status; }
}

или используйте встроенный блок кода:

<MyControls:Control runat="server" Status='<%= EntityStatuses.Active %>' />
0 голосов
/ 10 февраля 2011

Почему бы не установить статус в null и изменять его только тогда, когда он установлен в разметке?

private EntityStatuses? status = null;
public EntityStatuses? Status { get { return status; } set { status = value; } }

и

<MyControls:Control ID="Con" runat="server" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...