Wie Layouttemplate mit einem Platzhalter implementieren
-
30-09-2019 - |
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.
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