2009-07-30 3 views
1

Ich arbeite derzeit an einer erweiterten Webanwendung, die eine Reihe von dynamisch gerenderten Seiten enthält. Die Seiten sind Standardseiten, die einen Platzhalter enthalten, in den der Hauptinhalt aus einer Kombination von Xml und Xslt gerendert wird.ASP.Net Ajax Collapsible Extender ViewState Problem

Ich habe vor kurzem versucht, eine ASP.Net Ajax Toolkit kollabierbaren Entender hinzuzufügen, um das Zusammenfalten und Erweitern der Paneele zu ermöglichen, die dynamisch gerendert werden. Ich habe das Extender-Markup zu unserer Haupt-xslt-Vorlage hinzugefügt und alles ist in Ordnung. Nun, alles ist in Ordnung, bis ein Post-Back stattfindet und die Panels in ihren ursprünglichen Zustand zurückkehren. Also, zum Beispiel, wenn ich die Seite mit den Panels laden zusammengeklappt dann nach dem Zurücksetzen der Seite keine offenen Panels zurückgesetzt, Das Problem wird durch die Tatsache verursacht, dass ich den dynamischen Inhalt in der Viewstate selbst und sobald die Seite nur geladen wird rufen Sie es aus dem Viewstate ab, anstatt das Xml erneut zu rendern.

Puh .... da ist der Hintergrund für das Problem.

Jetzt die Hauptfrage. Wie in aller Welt können Sie mit dem Extender in Javascript interagieren. Ich habe tagelang davon überzeugt, dass ich den Zustand in einer Seitenvariablen-Client-Seite zwischenspeichern und dann das Status-Post-Postback erneut anwenden kann. Es scheint jedoch keine Dokumentation oder Kenntnisse darüber zu geben, wie dies zu erreichen ist. Das Beste, was ich gefunden habe, ist ein sehr einfaches Javascript, mit dem Sie ein paar Ereignisse registrieren können, wenn das Panel erweitert oder minimiert wird.

Alles, was ich tun möchte, ist interagieren und Cache jedes Panels Zustand. Kann jemand etwas vorschlagen?

Antwort

0

OK, nur für den Fall, dass jemand ähnliches erreichen muss, ich habe es jetzt funktioniert.

Nach vielen Nachforschungen habe ich festgestellt, dass Sie mit einer der beiden clientseitigen Ereignisse eine der beiden beschriebenen Methoden verwenden können: here.

Also entschied ich den besten Weg war, ein paar versteckte Felder (ASP.Net HiddenField) der Seite im Ereignis Page_Load() programmatisch hinzuzufügen und die Namen jedes Extenders als eine getrennte Zeichenfolge in einem Feld und dann hinzuzufügen habe ein Feld pro Extender, um den Extender-Zustand zu halten. Sobald die Seite zurückgeschrieben wurde, wird der Wert jedes versteckten Felds der Extender aus dem Request.Form-Objekt abgerufen (dessen Schlüssel die ID der ausgeblendeten Felder ist), andernfalls wird, wenn es sich um die anfängliche Belastung handelt, nur ein Standardwert behandelt.

Dann habe ich nur ein einfaches clientseitiges Skript erstellt, das die onExpand- und onCollapse-Ereignisse behandelte und den Wert des bestimmten ausgeblendeten Feldes extenders aktualisierte.

Im pageLoad -Ereignis des Client-Skripts habe ich nur den Entsprechungsstatus basierend auf seinem versteckten Feld Wert festgelegt.

Einfach wirklich .... sollte so gedacht haben, um damit zu beginnen!