Wer weiß, wie ich ein Steuerelement innerhalb einer geteilten/statischen Funktion dynamisch laden kann? Die Funktion selbst ist innerhalb einer Mustinherit/Abstract-Klasse. (Es ist ein ASP.NET-Projekt in VB) ich so etwas wie dies tun will:
VB:LoadControl in der statischen/geteilten Funktion
Public Shared Function GetWidget(ByVal name As WidgetName) As Control
Select Case name
Case WidgetName.Name1
Return LoadControl("~/Control1.ascx")
Case WidgetName.Name2
Return LoadControl("~/Control2.ascx")
Case WidgetName.Name3
Return LoadControl("~/Control3.ascx")
End Select
End Function
meine C# ist ein wenig rostig, so könnte dies einige Syntaxfehler hat:
Public Static Control GetWidget(WidgetName name)
{
switch (name)
{
Case WidgetName.Name1:
return LoadControl("~/Control1.ascx");
break;
Case WidgetName.Name2:
return LoadControl("~/Control2.ascx");
break;
Case WidgetName.Name3:
return LoadControl("~/Control3.ascx");
break;
}
}
(Wobei WidgetName ein Enumerator ist.)
Ich bekomme "Kann nicht auf eine Instanz Mitglied einer Klasse innerhalb einer gemeinsamen Methode oder Shared-Member-Initialisierer ohne eine explizite Instanz der Klasse verweisen.", Aber ich don ' Ich verstehe diesen Fehler. Ich verstehe, was es bedeutet, ich verstehe einfach nicht, warum der Aufruf von LoadControl vom Compiler nicht als explizite Instanz der Klasse angesehen wird. Was ist nicht explizit an der Verwendung von LoadControl zum Erstellen eines neuen Steuerelements aus einer Datei? Ich habe versucht, ein neues Benutzersteuerelement zu erstellen und es zu initialisieren, und es dann zu einem anderen Steuerelement mit LoadControl ohne Erfolg zu setzen. Ich möchte auch nicht eine DirectCast, da ich versuche, dies in eine gemeinsame, MustInheret (abstrakte) -Klasse, die daher keine .aspx-Datei in eine <%@ Reference Control="~/SomeControlPath.ascx" %>
schreiben, so dass der Klassenname nicht verfügbar ist .
Ich versuche, eine statische Funktion zu schreiben, die einen Wert nimmt und ein Steuerelement zurückgibt, das nur auf dem Speicherort der Quelldatei des Steuerelements basiert. Das Endergebnis ist eine benutzerdefinierbare Liste von Steuerelementen. Sie erhalten eine Spalte mit Steuerelementen, die sie basierend auf einer statischen Liste der von mir angegebenen untergeordneten Steuerelemente hinzufügen, entfernen oder neu anordnen. Ich bin nicht mit diesem Ansatz verheiratet; es könnte in mehr als einer Hinsicht falsch liegen.
Ja, ich weiß, dass die statischen Zeichenketten, die da sind, Code riechen, sieht nicht wirklich so aus; es ist eine Vereinfachung, um die Frage zu stellen.
C#, VB oder einfache englische Erklärungen alle willkommen.
Es geht nicht darum, was zurückgegeben bekommen ... es ist, dass Sie nicht die Loadcontrol-Methode von innen anrufen die statische Methode ... weil es keine Instanz gibt. – CSharpAtl
Keine Sorge, war da! Schnappen Sie sich einen Kaffee und bleiben Sie vom Bier :) :) – Rippo
@CSharpAtl - Sie sind richtig, weshalb ich eine Alternative vorgeschlagen habe. – Rippo