2009-03-13 6 views
2

So arbeite ich an einem Projekt, das alle sein hat user controls registered in its web.config file (das ist sehr sauber und ordentlich scheint)Dynamisches Hinzufügen von Benutzersteuerungen in web.config registriert

So gut, weit, so (hier kommt das Problem) aber ich Ich versuche, Benutzersteuerelemente dynamisch zu einer Seite zu erstellen und hinzuzufügen. Diese Benutzersteuerelemente lösen Ereignisse aus, die verarbeitet werden müssen.

Normalerweise wäre das kein Problem: Sie registrieren nur das Steuerelement auf der Seite, laden Sie das Steuerelement, umwandeln Sie es auf den richtigen Typ, und zuweisen Sie die Ereignishandler, fügen Sie es der Seite hinzu, lehnen Sie sich zurück und lassen die Magie passiert, einfach peasy.

Aber ich kann den Typ des Steuerelements nicht referenzieren, wenn das Steuerelement in der Datei web.config registriert ist, was bedeutet, dass kein Cast vorliegt, was bedeutet, dass keine Ereignisbehandlung stattfindet!

Komischerweise können Sie den Typ referenzieren, wenn Sie die Benutzersteuerung der Seite zur Entwurfszeit hinzufügen!

Es muss einen Weg darum geben (ohne das Steuerelement auf der Seite registrieren oder ein Steuerelement zur Entwurfszeit hinzufügen), was in aller Welt fehlt mir?

Antwort

2

Es ist schon eine Weile, aber ich Ich glaube, ich habe diese Art von Verhalten in ASP.NET gesehen, wenn ein Projekt eine Website und nicht die Webanwendung ist. Soweit ich mich erinnere, kompiliert die Website jede Seite in eine eigene Assembly und ohne gemeinsamen Namensraum und unabhängig von der Konfiguration erfordert die <% @ Register%> -Richtlinie. Wenn Sie dies nicht tun, erhalten Sie genau den Fehler, dass eine Assembly-Referenz fehlt.

Ich muss testen, um sicher zu sein ...

+0

Sie haben recht mit der Website, die jede Seite in ihre eigene Assembly kompiliert. Wenn Sie die Steuerelemente in der web.config registrieren, sollte es in Ordnung sein. Möglicherweise müssen die Steuerelemente jedoch in einer separaten Assembly definiert werden, damit sie funktioniert. Bei der Arbeit verwenden wir die Steuerelemente von Telerik in einem Website-Projekt und es funktioniert gut. – Martin

+0

Sie haben absolut Recht, nur einen schnellen Test gemacht und es funktionierte gut in einer Web-Anwendung und scheiterte kläglich in einer Website. Dank dafür! –

0

mit den Worten: „Sie die Art verweisen können, wenn Sie die Usercontrol auf der Seite zur Entwurfszeit hinzufügen“

Meinen Sie damit sie fügt ein <% @ Register%> Richtlinie ganz oben auf der Seite?

Oder vielleicht, fügt es eine Verwendung/Importe (je nach Verwendung von C#/vb.net) -Klausel in Ihrem Quelldokument?

Da müssen Sie normalerweise den Namespace in den Codebind importieren, um in der Lage zu sein, zu Ihrem Steuerelementtyp zu konvertieren. Vielleicht fehlt genau das.

+0

Nein, dass die seltsame Sache ist, die Registrierung in der web.config erfolgt (), so gibt es keine Notwendigkeit, <% @ Register% > Direktive auf der Seite. Wenn Sie Ihr Benutzersteuerelement auf die Seite ziehen, fängt alles an zu arbeiten (fügt kein <% @ Register%> oder ein Includes hinzu) –

0

Die <Kontrollen> Abschnitt in web.config und die <% @ Register%> Richtlinie sind die gleiche Sache (mit der kleinen Ausnahme, die Einträge in web.config auf die gesamte Anwendung gelten). Mit ihnen können Sie Entwurfszeitsteuerelemente zu einem Webformular hinzufügen.

Wenn Sie einer Seite dynamisch Steuerelemente hinzufügen möchten, verwenden Sie die LoadControl-Funktion, um eine Instanz Ihres Steuerelements abzurufen. Bei einer Kontrolle mit einem Klassennamen „Header“, wird folgende ein Steuerelement laden, eine Eigenschaft, und fügen Sie die Steuerung an die benannte Form „form1“:

Dim head As Header = LoadControl("~/Controls/Header.ascx") 
    head.Text = "Some text..." 
    Me.form1.Controls.Add(head) 
+0

Genau das habe ich erwartet, aber ich bekomme "Der Typ oder Namespace Name 'Header' konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assembly-Referenz?) " (das Seltsame ist, wenn ich das Tag für ein Header-Steuerelement der Seite hinzufüge [nur die ] es wird gut funktionieren!) –

Verwandte Themen