2009-02-03 23 views
6

Ich füge dynamisch ein benutzerdefiniertes Benutzersteuerelement zur Seite gemäß this post hinzu.Festlegen von Eigenschaften für dynamisch hinzugefügtes UserControl

Allerdings muss ich eine Eigenschaft auf das Benutzersteuerelement festlegen, wie ich es auf der Seite hinzufügen. Wie mache ich das?

-Code-Schnipsel wäre schön :)

Informationen sein:

ich eine benutzerdefinierte Benutzersteuerung mit einem öffentlichen Bereich haben (Eigenschaft ... zB public int someId;)

Als ich hinzufügen UserControl zu einer Seite, deren Typ UserControl ist. Umsetze ich es einfach in MyCustomUCType und setze eine Eigenschaft auf ein Cast Control?

p.s. sieht so aus als hätte ich meine eigene Frage beantwortet.

+0

Was meinen Sie mit dem Festlegen einer Eigenschaft? HTML-Attribut? Wann versuchen Sie, die Eigenschaft für ein DataBound-Ereignis oder etwas hinzuzufügen? In welchem ​​Ereignis erstellen Sie das Steuerelement? – bendewey

+0

Der verlinkte Post erklärt, was er zu tun versucht –

Antwort

10

Ah, ich antwortete, bevor Sie die zusätzliche Erläuterungen gegeben. Die kurze Antwort ist, ja, wirf es einfach als benutzerdefinierten Typ.

Ich lasse den Rest meiner Antwort hier als Referenz, obwohl es nicht scheint, dass Sie es brauchen werden.


Borrowing aus dem Code in der anderen Frage, und unter der Annahme, dass alle Benutzereinstellungen vorgenommen werden können aus der gleichen Basisklasse zu erben, können Sie dies tun.

Erstellen Sie eine neue Klasse, die als Basissteuerung zu handeln:

public class MyBaseControl : System.Web.UI.UserControl 
{ 
    public string MyProperty 
    { 
     get { return ViewState["MyProp"] as string; } 
     set { ViewState["MyProp"] = value; } 
    } 
} 

Dann aktualisieren Sie Ihre Benutzer von Ihrer Basisklasse anstelle von Usercontrol erben steuert:

public partial class SampleControl2 : MyBaseControl 
{ 
    .... 

Dann wird in dem Ort, an dem Sie die Steuerelemente zu laden, dies ändern:

UserControl uc = (UserControl)LoadControl(controlPath); 
PlaceHolder1.Controls.Add(uc); 

zu:

MyBaseControl uc = (MyBaseControl)LoadControl(controlPath); 
uc.MyProperty = "foo"; 
PlaceHolder1.Controls.Add(uc); 
+0

Ich dachte, dies funktioniert nur in Web-Anwendungsprojekten und nicht in Website-Projekten. Ist das immer noch so? –

+0

Es sollte funktionieren, egal. Ich hatte nie ein Problem damit. –

1

Ja, Sie übertragen das Steuerelement einfach auf den richtigen Typ. EX:

((MyControl)control).MyProperty = "blah"; 
+0

Dies funktioniert nicht in Website-Projekten mit Benutzersteuerelementen –

+0

funktioniert es gut. –

+0

Es funktioniert, wenn Sie das Steuerelement auf der Seite registrieren. –

2

„Als ich ein Benutzersteuerelement auf einer Seite, sein Typ hinzuzufügen, ist Usercontrol kann ich es nur in MyCustomUCType gegossen und eine Eigenschaft auf einem gussSteuerung eingestellt.?“

Das würde ich tun. Wenn Sie den Beispielcode tatsächlich verwenden, wo er verschiedene Steuerelemente lädt, würde ich auch ein if (x ist ControlType) verwenden.

if(x is Label) 
{  
    Label l = x as Label; 
    l.Text = "Batman!"; 
} 
else 
    //... 

bearbeiten: Jetzt ist es 2.0 kompatibel

+0

so gut wie die Antwort ist, sieht aus wie Sie mit 3.5 Framework, meins ist 2.0. Danke. –

+0

Ändern Sie einfach die var zu Label und Sie werden compat mit 2.0 –

Verwandte Themen