Tracking-Zustand mit ASP.NET AJAX / ICallbackEventHandler

stimmen
9

Ich habe ein Problem mit Zustand in einer ASP.NET AJAX-Seite beibehalten wird. Kurzversion: Ich brauche eine Möglichkeit, die Seite Viewstate zu aktualisieren, nachdem ein asynchroner Rückruf gemacht wurde, zu reflektieren, jeder Zustand ändert den Server während der Asynchron-callte.

Dies scheint ein allgemeines Problem zu sein, aber ich werde mein Szenario beschreiben zu helfen, zu erklären:

Ich habe eine gitterartige Steuerung, die einige JavaScript-Erweiterungen hat - nämlich die Fähigkeit, Spalten und Zeilen zu ziehen. Wenn eine Spalte oder Zeile in eine neue Position fällt gelassen wird, wird eine AJAX Methode aufgerufen, um die Steuerserver-Seite zu melden und ein entsprechendes serverseitige Ereignis ausgelöst ( „OnColumnMoved“ oder „OnRowMoved“).

ASP.NET AJAX-Aufrufe, die standardmäßig die gesamte Seite als Anfrage senden. Auf diese Weise wird die Seite durch einen kompletten Lebenszyklus geht, Ansichtszustand wird beibehalten und der Zustand der Steuerung gestellt wird, bevor die Methode Raisecallbackevent aufgerufen wird.

Da jedoch der AJAX - Aufruf die Seite nicht aktualisiert werden , spiegelt die Viewstate den ursprünglichen Zustand der Steuerung, auch nach der Spalte oder Zeile verschoben wurde. So zweites Mal eine clientseitige Aktion auftritt, die AJAX Anfrage wird an den Server und die Seite und Steuerung ist eingebaut wieder nach oben zu reflektieren dem ersten wurde Zustand der Kontrolle, nicht der Zustand nach der ersten Spalte oder Zeile bewegt.

Dieses Problem erstreckt sich auf viele Auswirkungen. Zum Beispiel, wenn wir eine clientseitige / AJAX Aktion ein neues Element in das Netz hinzuzufügen, und dann wird eine Reihe gezogen wird, wird das Gitter eingebaute Server-Seite mit einem weniger Artikel als auf der Client-Seite.

Und schließlich und am meisten ernst für mein konkretes Beispiel, das tatsächliche Datenquellenobjekt uns auf agieren wird auf der Seite Viewstate gespeichert. Das war eine Design-Entscheidung eine Stateful Kopie der manipulierten Daten zu ermöglichen, halten die entweder an der DB nach vielen Manipulationen oder verworfen begangen werden, wenn der Benutzer unterstützt werden. Das ist sehr schwer zu ändern.

Also, noch einmal, ich brauche einen Weg für die Seite Viewstate auf Rückruf aktualisiert werden, nachdem die AJAX-Methode ausgelöst wird.

Veröffentlicht am 05/08/2008 um 14:52
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
1

Wenn Sie bereits die Viewstate um ohnehin schlurfend, dann kann man auch ein Update verwenden. Seine partielle Postbacks wird die Seite Viewstate automatisch aktualisiert.

Beantwortet am 07/08/2008 um 17:19
quelle vom benutzer

stimmen
1

Überprüfen Sie dieses Blog - Post aus: Tweaking die ICallbackEventHandler und Viewstate . Der Autor scheint die sehr Situation zu adressieren , die Sie erleben:

Also, wenn ICallbackEventHandler verwenden, haben Sie zwei Hindernisse zu überwinden, für Rückrufe aktualisierte Statusverwaltung zu haben. Erstens ist das Problem des Nur-Lese-Ansichtszustandes. Die andere ist die Registrierung tatsächlich die Änderungen der Benutzer auf der Seite gemacht hat, bevor der Rückruf ausgelöst wird.

Sehen Sie sich die Blog - Post für seine Vorschläge, wie dieses Problem zu lösen. Sie können auch dieses Forum posten , die das gleiche Problem wie auch diskutiert.

Beantwortet am 05/08/2008 um 15:25
quelle vom benutzer

stimmen
0

Ich verstehe nicht, warum Sie eine benutzerdefinierte Steuerung dafür verwenden würden, wenn das eingebaute ASP.NET AJAX Update das Gleiche tut.

Es kommt noch hinzu, mehr Komplexität, gibt Ihnen weniger Unterstützung, und macht es schwieriger für andere auf Ihrer Anwendung zu arbeiten.

Beantwortet am 08/08/2008 um 05:56
quelle vom benutzer

stimmen
0

Ich fand eine recht elegante Lösung mit Telerik RadAjaxManager . Es funktioniert ganz gut, im Wesentlichen Sie jedes Steuerregister , die ein Postback aufrufen könnte, und dann jedes Steuerregister , die neu gezeichnet werden sollte , nachdem die Postbacks asynchron ausgeführt wird. Die RadAjaxManager das DOM nach dem Asynchron - Postbacks aktualisieren und das Viewstate und alle betroffenen Kontrollen neu schreiben. Nachdem Sie einen Blick in Reflector nehmen, sieht es ein wenig kludgy unter der Haube, aber es passt meine Zwecke.

Beantwortet am 08/08/2008 um 05:18
quelle vom benutzer

stimmen
0

Ich fand diese beiden Links, die Sie zur Verfügung gestellt, aber wie bereits erwähnt sie sind einfach das Problem zu beschreiben, es nicht zu lösen. Der Autor der Blog-Post schlägt eine Abhilfe durch einen anderen Viewstate-Anbieter verwenden, aber das ist leider nicht die Möglichkeit, in diesem Fall ... Ich muß wirklich die Einzelheiten des allein verlassen und Viewstate nur Haken auf dem, was getan wird, out-of-the-box.

Beantwortet am 05/08/2008 um 15:54
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more