Laden Sie dynamisch ein Benutzersteuerelement (ascx) in eine asp.net-Website

8

Ich versuche, ein Benutzersteuerelement in einer asp.web-Site dynamisch zu laden. Aufgrund der Tatsache, wie asp.net-Websites Projekte eingerichtet werden (ich denke), kann ich nicht auf die Typdefinition des Benutzersteuerelements zugreifen.

Ich bekomme eine Nachricht, die besagt, dass meine Klasse HE_ContentTop_WebControl1 ist: Der Typ oder Namespace-Name 'HE_ContentTop_WebControl1' konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assembly-Referenz?)

Irgendeine Idee, wie das funktionieren könnte? Ich habe versucht, Namespace zu verwenden, aber es scheint mir, dass asp.net-Websites nicht standardmäßig mit Namespaces arbeiten. Ich wäre an einem Nicht-Namespace-Ansatz interessiert.

TIA

%Vor%     
Joel Coehoorn 17.08.2009, 21:34
quelle

6 Antworten

10

Wenn das Steuerelement in derselben Assembly wie Ihr Webprojekt vorhanden ist, müssen Sie in Ihrer ASPX-Datei eine Verweisdirektive hinzufügen,

z.B.:

%Vor%

Denken Sie daran, dass es oft ein paar Minuten dauert (oder manchmal ein Build), damit IntelliSense dies übernimmt.

    
jscharf 17.08.2009, 21:38
quelle
7

Es kann leicht mit Namespaces gemacht werden. Hier ist ein Beispiel:

WebControl1.ascx:

%Vor%

Beachten Sie, dass Vererbt den Namespace (MyUserControls) und nicht nur den Klassennamen (WebControl1)

referenziert

WebControl1.ascx.cs:

%Vor%

Beachten Sie, dass die Klasse in den Namespace MyUserControls

aufgenommen wurde

Default.aspx.cs:

%Vor%

Dieser Ansatz ermöglicht es Ihnen möglicherweise, Ihre Benutzersteuerelemente neu zu verteilen (oder in einem separaten Projekt zu behalten), ohne sie in Ihren ASPX-Dateien referenzieren zu müssen.

    
Tchami 17.08.2009 21:52
quelle
4

Namespaces werden vom Websitemodell nicht unterstützt. Daher konnte ich keine der vorgeschlagenen Lösungen zum Funktionieren bringen. Es gibt jedoch eine Lösung. Erstellen Sie eine Schnittstelle und fügen Sie sie in App-Code ein, und implementieren Sie anschließend die Schnittstelle im Benutzersteuerelement. Sie können auf die Schnittstelle umwandeln und es funktioniert.

    
Curtis White 17.06.2014 23:37
quelle
2

Das Thema dieses Beitrags ist ein bisschen irreführend. Wenn Sie ein Steuerelement nur dynamisch hinzufügen möchten, müssen Sie nicht auf das Steuerelement verweisen. Daher können Sie es einfach mit einem einfachen Element wie dem folgenden hinzufügen:

%Vor%

ohne Namespace hassel.

    
Tillito 29.08.2012 10:49
quelle
1

Wenn Sie das Benutzersteuerelement auf diese Weise darstellen, kann dies zu vielen Problemen führen. Mein Ansatz besteht darin, eine Klasse (z. B. Steuerelementklasse) zu erstellen, alle Eigenschaften und Methoden für das Umwandeln in sie einzufügen und diese Klasse von System.Web.UI.UserControl zu übernehmen .Dann verwenden Sie in Ihrer Benutzersteuerungscodedatei anstelle von System.Web.UI.UserControl diese Steuerklasse.

Jetzt, wenn du Casting brauchst, nur mit dieser Klasse. es wird auch Licht werfen.

    
ratnesh 14.07.2010 15:10
quelle
1

Die Referenz ist nicht genug mit

%Vor%

in der aspx-Datei ist nur ein Teil der Antwort.

Sie müssen auch den calssName in der User Control aspx-Datei

hinzufügen %Vor%

und dann können Sie den userontrol in Ihrer aspx-Datei verwenden

%Vor%     
noam giladi 18.08.2009 09:07
quelle

Tags und Links