Laden...

Frage zu ViewState

Erstellt von AlfameisterT vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.094 Views
A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren
Frage zu ViewState

Hallo,

2 Usercontrols kommunizieren über ein Interface.
In Control2 habe ich eine Referenz von Control1. Da die Variablen den Wert nach jedem Zyklus verlieren wollte ich dieses in den Viewstate ablegen.

Das klappt natürlich nicht, da es ja keinen Konstruktor gibt.

Wie lößt man das am elegantesten ohne das ganze Control1 in den Viewstate zu legen?

178 Beiträge seit 2006
vor 18 Jahren

Moion,

beschreibe mal was Du mit "kommunizieren über ein Interface" meinst...
Möchtest Du werde von UC1 in UC2 haben?

Enjoy

Christian Arnold

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 18 Jahren

Hauptsächlich greife ich auf Properties zu. Da waren zwar noch ein paar Listener, welche ich jetzt durch Events ersetzt habe.

Die Properties lagen auch im Viewstate. Da man auf den Viewstate anderer Komponenten nicht zugreifen kann, habe ich das Zeugs in die Session gelegt.

Jetzt übergebe ich strings der entsprechenden Session und hole mir da die Werte raus.
Wollte halt nicht alles doppelt und dreifach halten.

Diese zustandslose Webzeugs zerbricht mir noch den Kopf 😁

C
1.215 Beiträge seit 2004
vor 18 Jahren

a)
Das ViewState-Objekt ist nicht als "Massenspeicher" gedacht, da sein Wert bei jeder Anforderung zum Client übertragen und nach jedem Postback von dort zurück geschickt wird. Durch die Encodierung ist der Wert ohnehin schnell sehr gross.
Im ViewState sollten nur Werte abgelegt werden, die der Wiederherstellung des Control-Zustands dienen, er ist jedoch nicht dafür ausgelegt, komplexe Objekte durch eine Anforderung zu schleifen.

b)
Nur Typen, welche das Interface ISerializable implementieren werden überhaupt im wert des ViewState gespeichert. 'Control' implementiert diese Schnittstelle nicht.

Schau Dir einmal den vom ViewState-Objekt generierten Wert im HTML-Output der Page an. Wenn man dazu übergeht, alles darin abzulegen, was einem einfällt, um eine scheinbar zustandsgesicherte Verbindung zu simulieren, nimmt er schnell mehr als die Hälfte der übertragenen Daten ein.
Ich würde Dir raten, lediglich die ID des referenzierten Controls im ViewState zu übertragen - mittels 'Page.Findcontrol' kannst Du dann Dein Control wiederfinden.

Grüsse
Cord