2009-11-09 2 views
0

У меня есть страница веб-формы, которая называется Search.aspx. Мне нужно отобразить форму в других местах, поэтому я хотел бы преобразовать веб-форму в пользовательский элемент управления, но мой Search.aspx.cs наследует собственный класс страницы, который наследует System.Web.UI.Page. Поскольку I C# не поддерживает множественное наследование, я не могу наследовать как свой собственный класс Page class, так и класс System.Web.UI.UserControl в классе класса User Control Search (Search.ascx.cs).Преобразование ASP-формы в пользовательский элемент управления

Мне было интересно, есть ли способ обойти это без необходимости создания второго настраиваемого класса страниц для UserControl.

Заранее спасибо.

ответ

1

Что требуется форме поиска из унаследованного пользовательского класса страниц? Вы можете создать свою форму поиска, чтобы она представляла собой не что иное, как входные данные и общедоступные свойства, которые отображают входные значения. Трудно сказать, какой лучший ответ - без дополнительной информации о том, какое значение предлагает пользовательский класс. Как правило, элементам управления не нужно много знать о своей родительской странице.

1

Зависит от остальной архитектуры.

Простейший маршрут заключается в изменении вашего наследования на UserControl. Если вам не хватает некоторых методов в вашем обычном базовом классе, вы можете их дублировать в пользовательском базовом классе UserControl.

Если вы пытаетесь сохранить его СУХОЙ, переформатируйте эти настраиваемые методы в класс, который предоставляет эти методы для любого класса Page или UserControl. Вы бы использовали композицию, а не наследование, что может быть лучшим путем, если ваше дерево наследования становится глубоким.

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

Смежные вопросы