2 Stimmen

Programmatisch hinzugefügte User Controls erzeugen keine untergeordneten Controls

Ich habe ein Benutzersteuerelement (.ascx) in meinem Projekt, das ich einer Seite programmatisch im Page_Load-Ereignishandler der Seite hinzufüge, wie folgt:

Controls.Add(new MyProject.Controls.ControlWidget());
Databind();

Wenn ich versuche, auf die untergeordneten Steuerelemente des Steuerelements vom Steuerelement selbst aus zuzugreifen, sind sie nicht vorhanden.

public override void DataBind()
{
  myrepeater.DataSource = GetDataSource(); 
  // throws an exception because myrepeater is null

  base.DataBind();
}

Wie greife ich auf die untergeordneten Steuerelemente der Benutzersteuerung zu? Ich habe versucht, einen Aufruf von EnsureChildControls() zu meiner DataBind()-Überschreibung hinzuzufügen, aber das scheint keinen Unterschied zu machen.

5voto

Steven Robbins Punkte 26083

Sie müssen LoadControl verwenden, um sie zu laden, und nicht nur die Klasse instanziieren. LoadControl "zaubert" hinter den Kulissen, um alles zu verbinden und das Frontend zu instanziieren.

0voto

Canavar Punkte 46926

EDIT : Ich habe Ihre Frage missverstanden,

Versuchen Sie dies, um Ihr UserControl zu Ihrer Seite hinzuzufügen:

UserControl uc = new UserControl();
uc.LoadControl(Server.MapPath("MyUserControl.ascx");
this.Controls.Add(uc);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X