LoadControl und Construct ASP.Net Control

8

Ich habe eine Frage, warum wir nur dynamische Kontrolle mit LoadControl hinzufügen können. Zum Beispiel:

%Vor%

Wenn in der page_load-Methode von wucDate das untergeordnete Steuerelement von wucDate null ist, aber wenn ich die folgende Methode verwende:

%Vor%

In der page_load-Methode von wucDate ist das untergeordnete Steuerelement von wucDate nicht null. Kann mir jemand erklären, warum asp.net keine Kindersteuerung von wucDate erzeugt, wenn ich contructor verwende ??? Danke

    
user85996 24.08.2009, 03:55
quelle

4 Antworten

8

Beim dynamischen Laden eines Benutzersteuerelements muss sichergestellt werden, dass die standardmäßige ASP.NET-Seitenereignispipeline initiiert wird und normal fortschreitet. Wenn Sie den neuen Operator verwenden, um eine Instanz eines Benutzersteuerelements zu erstellen, wird dieses Benutzersteuerelement dem Ereignissystem von ASP.NET nicht ordnungsgemäß hinzugefügt. Wenn die Ereignisse (Init, Load, PreRender usw.) nicht ausgelöst werden, funktioniert Ihr Steuerelement nie richtig. Aus diesem Grund ist es notwendig, LoadControl zu verwenden, da dies sicherstellt, dass die Instanz Ihres Benutzersteuerelements ordnungsgemäß erstellt und an ASP.NET angehängt wird.

    
jrista 24.08.2009, 04:00
quelle
4

Offenbar hat die Verwendung von LoadControl mit typeof (oder GetType) das gleiche Problem wie die Verwendung von 'new', bei dem die untergeordneten Steuerelemente nicht initialisiert werden. Die Verwendung von LoadControl mit einer Zeichenfolge für die ASCX-Datei funktioniert.

Initialisiert untergeordnete Steuerelemente nicht.

%Vor%

Funktioniert!

%Vor%     
Doug Domeny 09.09.2009 14:47
quelle
2

Die Initialisierung der Steuerelemente in einem Benutzersteuerelement wird von der ASCX-Datei gesteuert. Wenn nur "new SomeControl" verwendet wird, wird diese Initialisierung nicht ausgeführt, und selbst wenn dies der Fall wäre, würde das gesamte Design (Markup) in der ascx-Datei verloren gehen.

Denken Sie daran, dass die Klasse "wucDate" nur die Basisklasse ist, von der das vollständige Benutzersteuerelement erbt. Es ist nicht die selbe Klasse wie bei der Verwendung von LoadControl ("wucDate.ascx").

Und um ehrlich zu sein, hat LoadControl nicht viel, wenn überhaupt etwas mit dem Seitenlebenszyklus zu tun. Dieser Teil wird behandelt, wenn Sie das Steuerelement der Containers-Auflistung des Containers hinzufügen.

    
gliljas 15.10.2009 21:01
quelle
0

Wie ich mich erinnere, betrifft das, wie ASP.NET Seitenkomponenten zur Laufzeit erstellt. Obwohl Ihre Seiten in ASP.NET über eine Klasse verfügen, die in Ihrer CodeBehind-Datei definiert ist, sind ihre Typen nicht wirklich vor Laufzeit vorhanden. Wie eine Seite, obwohl Sie ein Steuerelement definiert haben, wird der wucDate-Typ erst erstellt, wenn er zur Laufzeit hinzugefügt wird. Aus diesem Grund muss das Steuerelement mit LoadControl geladen werden, um den Typ zu initialisieren und über den Seitenlebenszyklus ordnungsgemäß einzulaufen.

Dies ist das Beste aus meinem Gedächtnis, also wenn ich hier falsch bin, lass es mich wissen.

    
Nathan Taylor 24.08.2009 04:05
quelle

Tags und Links