Переопределение коллекции элементов управления в WebControl

Я пытаюсь переопределить коллекцию Controls элемента управления, который унаследован от WebControl, чтобы, когда пользователь добавляет элементы управления в веб-элемент управления, я мог помещать кнопки до и после него и помещать их в свою собственную оболочку. Что-то вроде этого:

protected override ControlCollection Controls
{
    EnsureChildControls();
    return this._panel.Controls;
}

Однако, когда я делаю это, состояние представления дочерних элементов управления по какой-то причине не поддерживается. Есть идеи?

Спасибо!

1 ответ

ViewState - это объектный граф, который построен параллельно дереву элементов управления, поэтому изменения такого рода обычно имеют побочные эффекты, которые вы описываете. Можно утверждать, что вы по сути угоняете объект Controls и придаете ему другое значение, которое на самом деле не является намерением переопределить. Скорее, переопределение предназначено для обеспечения другого механизма для достижения того же значения или намерения. "Дочерние элементы управления одного из моих детей" - это не то же самое, что "Дочерние элементы управления".

Есть лучшие способы выполнить то, что вы описываете. Можно было бы явно указать свойство вашего элемента управления, к которому пользователи "области" должны добавить свои элементы управления. Если целью является сложный элемент управления, имеющий одну настраиваемую область, то предоставьте эту область как таковую.

Другие вопросы по тегам