Cómo implementar LayoutTemplate con un marcador de posición
-
30-09-2019 - |
Pregunta
En mi propio control de servidor, quisiera poner en práctica algo similar a la ListView
:
<asp:ListView runat="server">
<LayoutTemplate>
<asp:PlaceHolder runat="server" id="itemPlaceholder" />
</LayoutTemplate>
</asp:ListView>
He creado una propiedad ITemplate
, puedo definir el diseño de la página aspx, y estoy haciendo ITemplate.InstantiateIn(myControl)
.
Pero no puedo encontrar la manera de insertar controles en el marcador de posición. Supongo que sería algo así como MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl)
. He intentado convertir al tipo de mi ITemplate
, pero me sale el error:
Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'
¿Qué me falta?
Editar acabo de encontrar esto: http: //www.nikhilk. net / SingleInstanceTemplates.aspx Control developers can define templates to be single instance using metadata which causes the ID'd controls within the template contents to be promoted to the page level... The parser and code-generator together work behind the scenes to add member fields, and initialize them at the right time.
. Parece que es sólo para los controles de usuario? Probé Page.FindControl()
después de hacer esto, pero no encontró nada.
Solución
Bueno, esto era simplemente una cuestión de error del usuario . Me instancia del ITemplate
en un Panel
, así que obviamente Page.FindControl()
(que no es recursivo) no funcionaría. Una vez que hice Panel.FindControl()
, todo funcionaba.
Otros consejos
En el pasado he utilizado esta biblioteca con éxito http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx