Bueno, la cosa se complica. He pensado la siguiente opción: buscar en la propiedad Contenido mediante expresiones regulares la etiqueta correspondiente al control personalizado, pero hacerlo mejor tipo BBCode:
Código vb:
Ver originalContenido = "Esto es el texto que contiene etiquetas HTML y BBCode para
interpretar. Por ejemplo:
[cpersCuadroNotas Titulo='Título del cuadro']
El cuadro de notas tiene texto y a su vez otros controles personalizados
<ul>
<li>[cpersDescargaDocumento NavigateUrl='Documento1.pdf' Target='_parent']Documento en PDF[/cpersDescargaDocumento]</li>
<li>[cpersDescargaDocumento NavigateUrl='Documento1.doc' Target='_blank']Documento en MS Word[/cpersDescargaDocumento]</li>
</ul>
[/cpersCuadroNotas]"
CuadroNotas y DescargaDocumento son los controles personalizados heredados de Panel e HyperLink respectivamente y el resultado debería ser algo así:
Código HTML:
Ver originalEsto es el texto que contiene etiquetas HTML y BBCode para
interpretar. Por ejemplo:
<ControlesPersonalizados:CuadroNotas ID="CuadroNotas_1" Runat="server" Titulo="Título del cuadro">
El cuadro de notas tiene texto y a su vez otros controles personalizados
<li><ControlesPersonalizados:DescargaDocumento ID="DescargaDocumento_1" Runat="server" NavigateUrl="Documento1.pdf" Target="_parent">Documento en PDF
</ControlesPersonalizados:DescargaDocumento></li> <li><ControlesPersonalizados:DescargaDocumento ID="DescargaDocumento_2" Runat="server" NavigateUrl="Documento1.doc" Target="_blank">Documento en MS Word
</ControlesPersonalizados:DescargaDocumento></li> </ControlesPersonalizados:CuadroNotas>
La inserción dinámica es sencilla en el evento Render
Código vb:
Ver originalDim cp As New ControlesPersonalizados.DescargaDocumento
cp.NavigateUrl = "Documento1.pdf"
cp.Target = "_parent"
cp.Text = "Documento en PDF"
cp.RenderControl(writer)
lo difícil está en saber cuándo intercalarlo antes de hacer:
Un saludo.