UserControl, наследующий от другого UserControl

У меня есть UserControl, который предоставляет некоторые функции (загружает и отображает информацию о клиенте), и я хочу расширить этот UserControl. Для некоторых форм требуется старый добрый UserControl, в то время как для других форм потребуются дополнительные поля. Как я могу наследовать от существующего UserControl, поддерживать существующие поля, но также добавлять новые поля?

Мне нравится, как работают мастер-страницы, когда вы определяете заполнители, а затем страницы с контентом просто заполняют эти заполнители дополнительным контентом. Возможно ли это с помощью UserControls? Спасибо!


person Jon Tackabury    schedule 22.07.2009    source источник


Ответы (2)


Возможно, вы могли бы определить несколько ASP:PlaceHolder (думайте об этом как о «зонах») в вашем UserControl и сделать их доступными через общедоступные (или защищенные, если вы хотите, чтобы унаследованный класс мог их изменять) свойства. Таким образом, вы можете добавлять к ним подэлементы управления, когда вам это нужно.

protected PlaceHolder TopZone {
   get { return plhTop; }
}


protected PlaceHolder BottomZone {
   get { return plhBottom; }
}

Из одного из унаследованных UserControls:

Label lblTest = new Label { Text = "Hello World!" };
TopZone.Controls.Add(lblTest);

Это очень простой пример, надеюсь, он вам пригодится.

person Zyphrax    schedule 22.07.2009
comment
Это очень похоже на метод, который я сейчас использую, но он не обеспечивает того же уровня функциональности, что и MasterPages, и его сложно поддерживать. :( - person Jon Tackabury; 23.07.2009
comment
UserControl — это элемент управления (контейнер), к которому можно просто добавить элементы управления. Но, возможно, теперь вы немного теряете смысл использования UserControl. - person Zyphrax; 24.07.2009

Я закончил использовать вложенные мастер-страницы в качестве своих пользовательских элементов управления (поскольку они в любом случае наследуются от пользовательского элемента управления). Затем я просто вызываю this.LoadControl("~/mp.master") и вуаля, у меня есть вложенные пользовательские элементы управления с полной поддержкой во время разработки. :)

person Jon Tackabury    schedule 27.07.2009