Wie erstellt man ein ASP.NET-Benutzersteuerelement mit inneren Eigenschaften, die mit Markup ähnlich wie UpdatePanel verwendet werden?

8

Ich erstelle ein Benutzersteuerelement, das sowohl innere Eigenschaften als auch normale Attribute haben soll. Obwohl die eigentliche Funktion des Steuerelements nichts mit UpdatePanel zu tun hat, versuche ich etwas mit ähnlichem ASPX-Markup zu erstellen. Der Entwickler, der die Seite gestaltet, sollte mein Steuerelement wie folgt verwenden können:

%Vor%

Es wäre auch akzeptabel, die ControlEvent -Tags in einem anderen Tag zu verpacken, ähnlich wie bei der Verwendung von UpdatePanel:

%Vor%

Aber das ControlEvents -Tag sollte nur dieses eine bestimmte Tag erlauben, kein normales Server-Markup oder irgendetwas.

Ich verstehe, wie man den Inhalt in ContentTemplate rendern kann (in meinem Page_Init verwende ich die Methode ITemplate.InstantiateIn(placeholderControl) ). Dieser Teil funktioniert gut. Wo ich Probleme habe, bekomme ich den ControlEvent -Teil zur Arbeit. Ich kann die innere Eigenschaft im Code-Behind wie:

erstellen %Vor%

Dabei scheint ASP.NET zu verstehen, dass ich ein ControlEvents -Tag haben möchte. Aber ich kann weder Eigenschaften, noch innere Eigenschaften oder Attribute erkennen. Wenn ich stattdessen den ersten Markup-Typ ausprobiere, erhalte ich einen Laufzeit-Parserfehler: "Die Eigenschaft 'ControlEvents' hat keine Eigenschaft namens 'ControlName'." Wenn ich den zweiten Markup-Typ versuche, erhalte ich zur Laufzeit einen NullReferenceException als Parser-Fehler, wobei der Fehler in der <ns:ControlEvent> -Zeile erzeugt wird.

Ich habe online nachgesehen, aber ich habe kein gutes Beispiel oder eine Erklärung gefunden, wie ich erreichen kann, was ich mit ControlEvent oder ControlEvents erreichen möchte. Was vermisse ich? Könnte mir hier jemand ein gutes Beispiel geben?

Danke!

Bearbeiten:

Es stellte sich heraus, dass ein Teil des Problems darauf zurückzuführen war, dass ich das Steuerelement auf der Seite registriert hatte, die es verwendete. Wenn ich benutze:

%Vor%

Es hat den Anschein, dass das Steuerelement selbst im Markup erkannt wurde, aber ns:ControlEvent nicht. Wenn ich die Register zu:

geändert habe %Vor%

es hat soweit funktioniert, das Steuerelement selbst zu verstehen (vorausgesetzt, dass runat="server" in den ns:ControlEvent -Tags enthalten war). Die untergeordneten Steuerelemente von MyControl wurden jedoch nicht instanziiert oder gerendert und Ereignisse des Steuerelements wie Page_Init und Page_Load wurden nicht ausgelöst.

Nachdem ich viel herumgespielt habe, habe ich herausgefunden, dass ich beide Register Direktiven brauche. Dies scheint eine chaotische "Lösung" zu sein, und es löst nicht wirklich alles, da zumindest einige der Markups in meinem Steuerelement nicht gerendert werden, obwohl das Template-Steuerelement ( ContentTemplate ) zu funktionieren scheint wieder.

Welche Arten von Dingen könnte ich hier vermissen, die diese Kontrolle weniger unordentlich machen würden und die diese Steuerung tatsächlich alles richtig machen würde?

    
Andrew 05.11.2010, 15:50
quelle

1 Antwort

10

Die Eigenschaften müssen als Collection und nicht als List implemented sein; Ansonsten ist das Wichtigste, das Sie sich merken sollten, dass das übergeordnete Steuerelement das Attribut [ParseChildren(true)] haben muss, damit dies funktioniert, andernfalls wird die Sammlung null sein.

Das folgende (server-control) Beispiel funktioniert wie erwartet:

%Vor%

HTH.

    
Nariman 07.11.2010 12:28
quelle

Tags und Links