5 Stimmen

Wie können Benutzersteuerelementeigenschaften festgelegt werden, bevor es gerendert wird?

Ich habe eine Benutzersteuerung (uc) auf einer Seite. uc stellt einige Eigenschaften zur Verfügung, die im Page_Load()-Ereignis der übergeordneten Seite festgelegt werden und beim Laden der Benutzersteuerung gelesen werden sollen.

Es scheint, dass das Page_Load()-Ereignis des uc stattfindet, bevor irgendwelche Eigenschaften von der übergeordneten Seite festgelegt werden.

Bei welchem Ereignis sollte ich also die uc-Eigenschaften festlegen, damit sie verwendet werden können, wenn sie gerendert wird?

Ich benutze ASP.NET 3.5 und C#

p.s. ich habe gerade eine Lösung aus meinem alten Code gefunden:

im Page_Load der Steuerung tun Sie Folgendes:

Page.LoadComplete += delegate { LoadTheControl(); };

Ich würde aber immer noch gerne Ihre Ideen hören.

6voto

rick schott Punkte 20895

Sie können auf die Eigenschaft OnPreRender ohne Tricks zugreifen.

3voto

David Punkte 70550

Ich bin heute Nachmittag auf dieses Problem gestoßen.

Ich habe eine öffentliche Methode im UserControl namens LoadData() erstellt und sie im Page_Load meiner Hosting-Seite aufgerufen, nachdem ich die Eigenschaft festgelegt habe, von der die Daten abhängen.

Hinzugefügt - Codebeispiel

Im Benutzersteuerelement:

public property SomeProp {get, set};

public void LoadData()
{
   // do work
}

und im Page_Load auf der Hosting-Seite

myControl.SomeProp = 1;
myControl.LoadData();

0 Stimmen

Ich schätze, ich hatte die gleiche Lösung (+1)

3voto

womp Punkte 113535

Wenn Sie das Benutzersteuerelement deklarativ auf der Seite platzieren, setzen Sie einfach dort die Eigenschaft.

Wenn Sie die Steuerelemente dynamisch zur Seite hinzufügen, setzen Sie einfach die Eigenschaft, bevor Sie das Steuerelement der Steuerelementsammlung der Host-Seite hinzufügen. Keines der Lebenszyklusereignisse für das Steuerelement wird ausgelöst, bis Sie Page.Controls.Add(myUserControl) aufrufen.

Wenn es unmöglich ist, die aktuelle Einrichtung zu vermeiden und das übergeordnete Element einige Logik in Page_Load ausführen und das UC bereits vorhanden sein muss, würde ich das vorschlagen, was David Stratton gepostet hat, aber meiner Erfahrung nach wird dies normalerweise standardmäßig als Initialize() oder Init() bezeichnet.

1voto

Charles Punkte 300

Nun ja, Keine der Antworten hat mir geholfen. Aber als ich die Eigenschaften manuell im Ereignis InitComplete() festlege, funktioniert alles einwandfrei. Mein Benutzersteuerelement konnte die Eigenschaft JETZT lesen, nachdem ich die Eigenschaft gesetzt habe und nicht davor.

0voto

gouderadrian Punkte 323

Ich habe ein ähnliches Problem festgestellt:-

Ich füge zunächst ein UserControl dynamisch hinzu und versuche dann, Werte den internen Steuerelementen des Steuerelements zuzuweisen (eine Textbox innerhalb des Benutzersteuerelements). Bei Verwendung eines Ereignisses wie INIT oder LOAD wird eine Nullreferenzausnahme ausgelöst, da die Steuerelemente noch nicht erstellt wurden, wie beim Durchlaufen des Codes ersichtlich wird.

Später fand ich heraus, dass dieses Problem nur auftritt, wenn ich das Steuerelement über eine Dim-Anweisung deklariere;

Dim MyControl as new MyUserControl
Me.Panel1.Controls.add(MyControl)
MyControl.SetLabelText("Mein Name") 'Verwendet eine Methode, um den Beschriftungstext beim Laden festzulegen.

Andererseits funktioniert es einwandfrei, wenn ich das Steuerelement wie folgt verwende:

Dim MyControl as MyUserControl = LoadControl("MyUserControl.ascx")
Me.Panel1.Controls.add(MyControl)
MyControl.SetLabelText("Mein Beschriftungstext")

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