he construir una costumbre WebControl, que tiene la siguiente estructura:Render varias colecciones de control en ASP.NET control personalizado
<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>
el control contiene dos propiedades ControlCollection, 'contenido' y 'pie de página'. Nunca intentado construir un control con varias colecciones de control, pero lo resolvió así (simplificado):
[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);
}
}
}
Sin embargo parece convertir correctamente, ya no funciona si añado algunas etiquetas de entrada y ASP.NET controles dentro de la propiedad (vea el código asp.net anterior). Voy a por el HttpException:
No es posible encontrar el control con id 'KeywordTextBox' que está asociado con la Etiqueta 'KeywordLabel'.
Algo comprensible, porque la etiqueta aparece antes del cuadro de texto en el controlcollection. Sin embargo, con los controles asp.net predeterminados funciona, ¿por qué no funciona? ¿Qué estoy haciendo mal? ¿Es posible incluso tener dos colecciones de control en un control? ¿Debería representarlo de manera diferente?
Gracias por responder.
Sí, esto funcionará! –