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?
Moion,
beschreibe mal was Du mit "kommunizieren über ein Interface" meinst...
Möchtest Du werde von UC1 in UC2 haben?
Enjoy
Christian Arnold
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 😁
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