您可以搜索使用遞歸算法,如Markust和安東尼的回答討論,它會在這種情況下工作。但是,它有一些問題。例如,如果在頁面上有兩個usercontrol實例,它將不起作用。
但是,更大的問題是您打破了usercontrol提供的封裝。包含頁面不應該知道usercontrol包含名爲「txtSearchCriteria」的文本框或名爲「btnSearch」的按鈕。 (或名爲「搜索」的<div>
)。包含頁面只能使用usercontrol使用usercontrol公開的界面進行操作。
我建議您在usercontrol中創建一個屬性(或一組屬性),以允許消費者以您期望的方式與控件一起使用。例如:
Public Boolean SearchControlsVisible
{
get { return search.Visible; }
set { search.Visible = value; }
}
酒店的代碼可以訪問「搜索」 <div>
毫不含糊,即使你有在頁面上的用戶控件的多個實例。這種做法也給你的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... />
感謝。可重複使用的岩石! :) – sangam 2013-11-24 06:18:19