多個控制集合我已經建立一個自定義的WebControl,它具有以下結構:渲染在ASP.NET自定義控件
<gws:ModalBox ID="ModalBox1" HeaderText="Title" runat="server">
<Contents>
<asp:Label ID="KeywordLabel" AssociatedControlID="KeywordTextBox" runat="server">Keyword: </asp:Label><br />
<asp:TextBox ID="KeywordTextBox" Text="" runat="server" />
</Contents>
<Footer>(controls...)</Footer>
</gws:ModalBox>
控制包含兩個的ControlCollection屬性,「內容」和「尾」。從來沒有試圖建立與多個控制集合控制,但解決它像這樣(簡化):
[PersistChildren(false), ParseChildren(true)]
public class ModalBox : WebControl
{
private ControlCollection _contents;
private ControlCollection _footer;
public ModalBox()
: base()
{
this._contents = base.CreateControlCollection();
this._footer = base.CreateControlCollection();
}
[PersistenceMode(PersistenceMode.InnerProperty)]
public ControlCollection Contents { get { return this._contents; } }
[PersistenceMode(PersistenceMode.InnerProperty)]
public ControlCollection Footer { get { return this._footer; } }
protected override void RenderContents(HtmlTextWriter output)
{
// Render content controls.
foreach (Control control in this.Contents)
{
control.RenderControl(output);
}
// Render footer controls.
foreach (Control control in this.Footer)
{
control.RenderControl(output);
}
}
}
但是它似乎正確地呈現,它不會了,如果我加入一些asp.net標籤和輸入工作屬性內的控件(參見上面的asp.net代碼)。我將得到HttpException:
無法找到具有標識'KeywordLabel'與 關聯的id爲'KeywordTextBox'的控件。
有些可以理解,因爲標籤出現在controlcollection的文本框之前。但是,使用默認的asp.net控件它確實有效,那麼爲什麼這不起作用呢?我究竟做錯了什麼?在一個控件中是否可以有兩個控件集合?我應該以不同的方式呈現嗎
感謝您的回覆。
是的,這將工作! – 2010-09-11 09:16:16