Вы можете выполнять поиск с использованием рекурсивного алгоритма, как описано в ответах Маркуста и Антонио, и в этом случае он будет работать.Однако у него есть несколько проблем.Например, он не будет работать, если на вашей странице есть два экземпляра usercontrol.
Однако большая проблема заключается в том, что вы нарушаете инкапсуляцию, которую обеспечивает usercontrol.Содержащая страница не должна знать, что пользовательский элемент управления содержит, скажем, текстовое поле с именем «txtSearchCriteria» или кнопку с именем «btnSearch».(Или <div>
с именем «search».) Содержащая страница должна работать только с usercontrol, используя интерфейс, который usercontrol предоставляет публично.
Я рекомендую вам создать свойство (или набор свойств) впользовательский контроль, позволяющий потребителям взаимодействовать с элементом управления так, как вы этого ожидаете.Например:
Public Boolean SearchControlsVisible
{
get { return search.Visible; }
set { search.Visible = value; }
}
Код свойства может получить доступ к поиску <div>
без двусмысленности, даже если у вас есть несколько экземпляров usercontrol на странице.Этот подход также дает вам возможность установить эти свойства в разметке ASPX, когда вы размещаете элемент управления на странице:
<my:ContactSearchPanel ID="contactSearch runat="server"
SearchControlsVisible="false"
...etc... />
Это не в вашем вопросе, но вам нужно будет реагировать на происходящие событияв пользовательском контроле, а также.Инструкции по вызову событий из пользовательского элемента управления см. На этой странице: http://msdn.microsoft.com/en-us/library/wkzf914z(v=vs.71).aspx
После того, как вы создали и выставили событие, вы можете прикрепить обработчик к разметке следующим образом:
<my:ContactSearchPanel ID="contactSearch runat="server"
SearchControlsVisible="false"
OnSearchClicked="SearchPanel_SearchClicked"
...etc... />