2012-02-26 51 views
0

我正在寫一個複合控件在c#asp.net中作爲一個實驗,並希望我的複合控件的所有實例都與一個外部控件交互。這可能嗎?asp.net webforms - 複合控件與頁面控件交互

事情我已經嘗試:

選項1:是否在網頁上不存在外部控制的控制範圍內的檢查,如果它不

選項2添加:有目標控件的ID通過在設計時複合控件,然後使用this.Page.FindControl()

顯然,這是一廂情願的想法,這將是簡單的:)

如果我嘗試從CreateChildControls方法中做到這一點, this.P age.FindControl(目標控件)總是返回null。如果我嘗試從該方法內將控件添加到頁面,則會引發異常:

「在DataBind,Init,Load,PreRender或Unload階段無法修改控件集合。」

是否有另一種方法/事件,我可以實現這一目標?

+0

你的意思是「讓我的複合控件的所有實例與一個外部控件交互」?另外,不要像這樣在單獨的控件之間創建依賴關係 - 通過控件屬性從頁面訪問它們。 – IrishChieftain 2012-02-26 15:32:52

+0

我基本上想要能夠將我的複合控件的一些實例添加到頁面,然後將它們全部輸出到同一個面板,而不是爲每個複合控件添加面板。 – Evert 2012-02-26 15:38:48

+0

所以你使用複合控件來包含其他控件?只是好奇,如果你真的需要複合材料?你的複合控制是做什麼的? – IrishChieftain 2012-02-26 15:49:28

回答

0

您可以通過實現INamingContainer接口在同一Web表單上創建多個實例。這基本上有助於防止在相同的命名空間中發生ID衝突。

如果您想訪問另一個控件,請在其上設置一個屬性以公開要公開的數據。

Build Composite Controls

0

你爲什麼不上什麼輸出它們,然後渲染面板的內容時,遞歸通過頁面的複合控件公開的公共屬性,發現複合控件的所有實例,搶文本,並將其添加到面板?