état ASP.NET AJAX suivi à l'aide / ICallbackEventHandler

voix
9

J'ai un problème avec le maintien de l'état dans une page ASP.NET AJAX. Version courte: Je besoin d'un moyen de mettre à jour la page ViewState après un rappel async a été faite, afin de refléter tout change d'état du serveur en cours de l'appel async.

Cela semble être un problème commun, mais je vais décrire mon scénario pour expliquer:

J'ai un contrôle de grille qui a des améliorations JavaScript - à savoir, la possibilité de glisser-déposer des colonnes et des lignes. Quand une colonne ou d'une rangée est tombé dans une nouvelle position, une méthode AJAX est appelée pour notifier le contrôle côté serveur et déclencher un événement côté serveur correspondant ( « OnColumnMoved » ou « OnRowMoved »).

appelle ASP.NET AJAX, par défaut, envoyer la page entière comme la demande. De cette façon, la page passe par un cycle de vie complet, viewstate est conservée et l'état de la commande est rétablie avant que la méthode RaiseCallbackEvent est invoquée.

Cependant, depuis l'appel AJAX ne met pas à jour la page, le ViewState reflète l' origine état du contrôle, même après la colonne ou une ligne a été déplacée. Donc , la deuxième fois une action côté client se produit, la demande AJAX va au serveur et la page et le contrôle sont construits en arrière à nouveau pour refléter le premier état du contrôle, pas l'état après la première colonne ou une ligne a été déplacée.

Ce problème s'étend à de nombreuses implications. Par exemple, si nous avons un côté client / l'action AJAX pour ajouter un nouvel élément à la grille, puis une rangée est déplacée, la grille est intégrée côté serveur avec un élément moins que sur le côté client.

Enfin et plus sérieusement mon exemple spécifique, l'objet source de données réelles que nous agissons sur est stocké dans le ViewState page. Ce fut une décision de conception pour permettre la tenue d'un exemplaire stateful des données manipulées qui peuvent être soit engagée à DB après de nombreuses manipulations ou mis au rebut si l'utilisateur se retire. Cela est très difficile de changer.

Donc, encore une fois, je besoin d'un moyen pour la ViewState page à jour le rappel après la méthode AJAX est déclenché.

Créé 05/08/2008 à 14:52
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
1

Si vous êtes déjà le ViewState traînant autour de toute façon, vous pourriez aussi bien utiliser un UpdatePanel. Ses postbacks partielles seront automatiquement mise à jour ViewState de la page.

Créé 07/08/2008 à 17:19
source utilisateur

voix
1

Consultez ce blog: Peaufiner la ICallbackEventHandler et Viewstate . L'auteur semble aborder la situation que vous rencontrez:

Ainsi, lors de l'utilisation ICallbackEventHandler vous avez deux obstacles à surmonter pour avoir mis à jour la gestion de l'Etat pour callbacks. Le premier est le problème de l'état d'affichage en lecture seule. L'autre est l'enregistrement en fait les changements que l'utilisateur a apportées à la page avant de déclencher le rappel.

Voir le billet de blog pour ses suggestions sur la façon de résoudre ce problème. Consultez également ce post sur le forum qui traite du même problème aussi bien.

Créé 05/08/2008 à 15:25
source utilisateur

voix
0

Je ne comprends pas pourquoi vous utilisez un contrôle personnalisé pour que, lorsque le ASP.NET AJAX UpdatePanel builtin fait la même chose.

Il ajoute un peu plus de complexité, vous donne moins de soutien, et rend plus difficile pour les autres de travailler sur votre application.

Créé 08/08/2008 à 05:56
source utilisateur

voix
0

J'ai trouvé une solution assez élégante avec RadAjaxManager de Telerik . Il fonctionne très bien, essentiellement vous enregistrer chaque contrôle qui pourrait invoquer un postback, puis enregistrer chaque contrôle qui doit être redessinées après postback est réalisée de manière asynchrone. Le RadAjaxManager mettra à jour les DOM après la postback async et réécrire le ViewState et tous les contrôles affectés. Après avoir pris un coup d' oeil dans le réflecteur, il semble un peu kludgy sous le capot, mais il convient à mes besoins.

Créé 08/08/2008 à 05:18
source utilisateur

voix
0

J'ai trouvé ces deux liens que vous avez fournis, mais comme il est indiqué qu'ils décrivent simplement le problème, pas le résoudre. L'auteur du blog propose une solution de contournement à l'aide d'un fournisseur de ViewState différent, mais malheureusement, ce n'est pas possible dans ce cas ... Je dois vraiment laisser les détails de la ViewState seule et juste accrocher à ce qui est fait hors de la boîte.

Créé 05/08/2008 à 15:54
source utilisateur

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