Templated Webcontrol (ascx)
-
Hallo,
ich versuche ein "templated WebControl" zu erstellen. Soll heissen, dass ich im Endeffekt eine .ascx Datei erstellen will, die ich dann wie ein normales (User-)Control anderen Seiten hinzufügen kann.also z.b. so:
<%@ Register TagPrefix="TagName" Namespace="NamespaceName" Assembly="testcontrol" %> <TagName:className id="_content" Runat="server" />
Das Besondere dbaie soll sein, dass ich dann in der aspx-datei (die das Control benutzt) diesem Control weitere Control "zuwesien" kann. in der Art wie z.b.:
<CustomControls:templateContent id="_content" Runat="server" > Radio1: <asp:RadioButton ID="RadioButton1" runat="server" /> Radio2: <asp:RadioButton ID="RadioButton2" runat="server" /> </CustomControls:templateContent>
bzw
<CustomControls:templateContent id="_content" Runat="server" > <content> Radio1: <asp:RadioButton ID="RadioButton1" runat="server" /> Radio2: <asp:RadioButton ID="RadioButton2" runat="server" /> </content> </CustomControls:templateContent>
ich habe mittlerweile auch ein (sehr kurzes) Besipiel im netz gefunden (http://www.devhood.com/Tools/tool_details.aspx?tool_id=583). Nur leider funktioniert das nicht wie es soll. Ich bekomme immer den Fehler NullReference-Exception in der Zeile
value.InstantiateIn(_content.ContentControl);
und bei den Teil versteh ich auch nicht genau wie das Funktioniert: (verbindung zwischen Public members(in codebehind) und HTML-(aspx)-Code und die Zeile mit dem InstantiateIn()
kann mir da jemand weiterhelfen? komme mittlerweile nicht mehr vorran.
-
Ich hätte jetzt einen Vorschlag:
Du nimmst einen Placeholder, den du als Property mit Namen "Content" nach außen gibst. Wichtig du musst der Property ein Attribut verpassen -> [PersistenceMode(PersistenceMode.InnerProperty)], vielleicht musst du bei der Klasse auch noch [ParseChildren(true)] als Attribut setzten.
Evtl. geht das auch über ITemplate, aber ich glaube damit kann man nur HTML-Code verarbeiten. -> testen