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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top