Поиск элемента управления на странице из базового класса страницы

Надеюсь, у вас хорошая пятница и все такое... ладно, вот мой вопрос:

Все мои страницы ASPX наследуются от базового класса BasePage. BasePage наследуется от:

System.Web.UI.Page

Теперь, как мне получить доступ/установить элемент управления на моей странице aspx из моей базы страниц? Я пробовал это:

HyperLink hypMainMenu = (HyperLink)Page.FindControl("hypMainMenu");
hypMainMenu.NavigateUrl = AppConfiguration.AppSettings.Urls.MainMenu;

Но hypMainMenu всегда null - не могу найти гада. Любые идеи? Или это плохая практика, и кто-то может порекомендовать лучший способ сделать это?

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


person Ev.    schedule 08.05.2009    source источник
comment
Когда вы найдете свой элемент управления, он, скорее всего, будет иметь свойство Parent ;-)   -  person Mark Dickinson    schedule 08.05.2009


Ответы (1)


Хотя то, что является хорошей практикой, а что нет, очень субъективно, я должен сказать, что попытка доступа к к чему бы то ни было из элемента управления из его базового класса является плохой практикой. Базовый класс должен только содержать код, относящийся к всем классам, которые его наследуют, и откуда вы знаете, что каждая страница, которую вы напишете в будущем, будет иметь этот элемент управления?

Лучшим способом решить вашу проблему (которую я предполагаю, что код для вашего главного меню находится только в одном месте) было бы написать UserControl и включить его на каждую страницу. Если вам нужно сделать что-то конкретное с этим элементом управления, вы можете сделать это в UC CodeBehind.

person Tomas Aschan    schedule 08.05.2009
comment
@Tomas: Да, у меня было ощущение, что кто-то это скажет. Я думаю, что я выберу пользовательский элемент управления - имеет смысл, спасибо за совет. Однако это произошло еще раз, когда у меня не было этой опции (по какой-то причине... на самом деле я думаю, что это как-то связано с установкой класса, зависящего от страницы, в теге body на главной странице), поэтому я все равно хотел бы знать, как это сделать для дальнейшего использования. - person Ev.; 08.05.2009
comment
Насколько я могу судить, FindControl предназначен для вашей цели. Вам просто нужно начать поиск с известного элемента управления, который содержит тот, который вам нужен, и рекурсивно использовать FindControl для детализации DOM. Вы можете написать что-то, что будет сканировать вашу дырявую страницу, но это будет кошмар с точки зрения производительности. - person Mark Dickinson; 08.05.2009
comment
@Mark: Да, я уже видел что-то подобное рекурсивно. Ладно. Я мог бы оставить это на время. - person Ev.; 08.05.2009