Frage

In meiner eigenen Server Kontrolle, würde Ich mag etwas ähnliches wie die ListView implementieren:

<asp:ListView runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" id="itemPlaceholder" />
    </LayoutTemplate>
</asp:ListView>

Ich habe eine ITemplate Eigenschaft erstellt, ich das Layout in der aspx Seite gesetzt, und ich tue ITemplate.InstantiateIn(myControl).

Aber ich kann nicht herausfinden, wie die Kontrollen an den Platzhalter einfügen. Ich vermute, es wäre so etwas wie MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl) sein. Ich habe versucht, auf die Art meiner ITemplate Gießen, aber ich den Fehler:

Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'

Was bin ich?

Edit: Ich habe gerade dies: 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.. Es scheint nur für User Controls zu sein? Ich versuchte Page.FindControl() nachdem dies zu tun, aber es hat nichts gefunden.

War es hilfreich?

Lösung

Ok, das war nur eine Frage der Benutzerfehler . Ich instanziiert die ITemplate in einem Panel, so offensichtlich Page.FindControl() (was nicht rekursiv) nicht funktionieren würde. Sobald ich Panel.FindControl() tat, funktionierte alles.

Andere Tipps

In der Vergangenheit habe ich diese Bibliothek mit Erfolg verwendet http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top