Ho costruire un costume WebControl, che ha la seguente struttura:Render collezioni di controllo multipli in ASP.NET controllo personalizzato
<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>
il controllo contiene due proprietà ControlCollection, 'Contenuti' e 'piè di pagina'. Mai provato a costruire un controllo con le collezioni di controllo multipli, ma risolto in questo modo (semplificato):
[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);
}
}
}
Tuttavia sembra rendere correttamente, non funziona più se aggiungo alcune etichette asp.net e di ingresso controlli all'interno della proprietà (vedi sopra il codice asp.net). Prendo il HttpException:
Impossibile trovare il controllo con id 'KeywordTextBox' che è associato con l'etichetta 'KeywordLabel'.
Un po 'comprensibile, perché l'etichetta viene visualizzata prima della casella di testo nella raccolta di controllo. Tuttavia, con i controlli predefiniti di asp.net funziona, quindi perché non funziona? Che cosa sto facendo di sbagliato? È persino possibile avere due raccolte di controllo in un unico controllo? Dovrei renderlo diversamente?
Grazie per le risposte.
Sì, questo funzionerà! –