Thomas Bandt

Über mich | Kontakt | Archiv

Zugriff auf Formularelemente eines dynamisch geladenen Usercontrols

Will man ein Usercontrol wie hier beschrieben zur Laufzeit einbinden, so funktioniert das erstmal tadellos. Bis zu dem Punkt, wo man Formulare nutzen möchte. Also nicht wirklich lange ;-)

Das Problem

Es ist unmöglich innerhalb des Page_Load Events auf die Werte der (serverseitigen) Formularelemente zuzugreifen. Lädt man ein Usercontrol fest in ein Webform, dann funktioniert das Ganze.

Die Ursache

Der Lifecycle des Webforms. Im Moment der Ausführung des Page_Loads-Events des UserControls stehen die PostBack-Daten noch nicht zur Verfügung - wohlgemerkt nur dann, wenn das Control dynamisch eingebunden ist.

Die Lösung I

Da der ganze PostBack-Vorgang ja sowieso durch einen Button ausgelöst wird, legen wir auf diesen Einfach eine Methode, in der uns dann auch die PostBack-Daten zur Verfügung stehen.

Dazu muss in der Methode InitializeComponent() (wird von Visual Studio zu jeder CodeBehind-Datei automatisch generiert) der Aufruf dieser Erfolgen:

private void InitializeComponent()
{
 this.Button1.Click += new System.EventHandler(this.Button1_Click);
 this.Load += new System.EventHandler(this.Page_Load);
}

Dabei steht Button1 für die ID des Buttons und Button1_Click für die Methode, die aufgerufen werden soll.

Die Lösung II

Unter Umständen kann es Sinn machen, das Ganze nicht über den Button zu handlen. Alternativ hierzu kann man auch die Methode PreRender überschreiben, dann stehen ebenfalls die PostBack-Daten zur Verfügung:

private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.PreRender += new System.EventHandler(this.newPreRender);
}

protected void newPreRender(object sender, System.EventArgs e)
{
 if(Page.IsPostBack)
 {
  Label1.Text = TextBox1.Text;
}

Dank

Dieser gilt ausdrücklich Alex Zeitler, der die Lösung für dieses Problem nach über 25 Mails in der ASP.NET Liste von ASPGerman heute mit mir gefunden hat :-)



« Zurück  |  Weiter »