2010-09-08 50 views
1

我試圖實現一個自定義的面板控件,將作爲一個命名容器。到目前爲止,這是我所做的。如何使用INamingContainer實現自定義面板?

首先,這是我的自定義控制,MyPanel ...

[ToolboxData("<{0}:MyPanel runat=server></{0}:MyPanel>")] 
public class MyPanel: Panel, INamingContainer 
{ 
} 

我嘗試使用它像這樣:

<cc1:MyPanel ID="A" runat="server"> 
    <asp:HyperLink ID="TestHyperLink" runat="server" /> 
</cc1:MyPanel> 
<cc1:MyPanel ID="B" runat="server"> 
    <asp:HyperLink ID="TestHyperLink" runat="server" /> 
</cc1:MyPanel> 

顯然,這是行不通的,這將是太容易了。 ASP.net仍然抱怨存在2 DocumentHyperLink:

The ID 'DocumentHyperLink' is already used by another control. 

我該如何解決這個問題?

謝謝。

回答

3

這聽起來像你可能受益於模板控制設計,而不是面板設計。這裏有一些資源開始使用模板控件:

模板設計的吸引力在於從一個重複的服務器控件ID在另一個模板是允許的。

+2

謝謝,我以前曾經見過這個。但是,我真的想嘗試一個專門的面板,而不是模板控件。如果不使用模板,是否真的沒有辦法重複ID? – md1337 2010-09-08 21:08:01

+0

@ md1337:我不確定。面板設計允許面板內的服務器控件與頁面類的成員變量相關聯。模板沒有。我想不出你描述的行爲是否具有開箱即用的控制能力。面板,嚮導,MultiView都是非模板化的,並且都顯示您遇到的行爲。我有點好奇,爲什麼你想避免模板? – kbrimington 2010-09-08 21:15:39

+3

我想我只是想避免模板的混亂,當我需要的只是一個簡單的容器,如面板,增加了爲其子控件提供獨特ID的功能。但是,似乎唯一的解決方案是像您提到的自定義模板控件。實際上有一個很好的解決方案http://stackoverflow.com/questions/1912283/asp-net-user-control-inner-content – md1337 2010-09-08 21:22:43