État de suivi à l'aide d'ASP.NET AJAX / ICallbackEventHandler

Translate

J'ai un problème avec le maintien de l'état dans une page ASP.NET AJAX. Version courte: j'ai besoin d'un moyen de mettre à jour la page ViewState après qu'un rappel asynchrone a été effectué, pour refléter les changements d'état effectués par le serveur lors de l'appel asynchrone.

Cela semble être un problème courant, mais je décrirai mon scénario pour aider à expliquer:

J'ai un contrôle en forme de grille qui a quelques améliorations JavaScript - à savoir, la possibilité de faire glisser et déposer des colonnes et des lignes. Lorsqu'une colonne ou une ligne est déposée 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").

Les appels ASP.NET AJAX, par défaut, envoient la page entière en tant que demande. De cette façon, la page passe par un cycle de vie complet, viewstate est conservé et l'état du contrôle est restauré avant que la méthode RaiseCallbackEvent ne soit appelée.

Cependant, puisque l'appel AJAX ne met pas à jour la page, le ViewState reflète leoriginalétat du contrôle, même après le déplacement de la colonne ou de la ligne. Ainsi, la deuxième fois qu'une action côté client se produit, la requête AJAX est envoyée au serveur et la page et le contrôle sont reconstitués pour refléter lepremièrel'état du contrôle, pas l'état après le déplacement de la première colonne ou ligne.

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

Et enfin et plus sérieusement pour mon exemple spécifique, l'objet de source de données sur lequel nous agissons est stocké dans la page ViewState. Il s'agissait d'une décision de conception permettant de conserver une copie avec état des données manipulées qui peuvent être soit validées dans la base de données après de nombreuses manipulations, soit supprimées si l'utilisateur se retire. C'est très difficile à changer.

Donc, encore une fois, j'ai besoin d'un moyen pour que la page ViewState soit mise à jour lors du rappel après le déclenchement de la méthode AJAX.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Si vous mélangez déjà ViewState de toute façon, vous pouvez également utiliser un UpdatePanel. Ses publications partiellesvolontémettre à jour le ViewState de la page automatiquement.

La source
Translate

Consultez ce billet de blog:Ajustement de ICallbackEventHandler et Viewstate. L'auteur semble aborder la situation même que vous vivez:

Ainsi, lorsque vous utilisez ICallbackEventHandler, vous avez deux obstacles à surmonter pour mettre à jour la gestion de l'état des rappels. Le premier est le problème de l'état d'affichage en lecture seule. L'autre enregistre en fait les modifications 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. Vérifiez également cecimessage de forumqui aborde également le même problème.

La source
Translate

En fait, j'ai trouvé les deux liens que vous avez fournis, mais comme indiqué, ils décrivent simplement le problème, pas le résolvent. L'auteur de l'article de blog suggère une solution de contournement en utilisant un autre fournisseur ViewState, mais malheureusement, ce n'est pas une possibilité dans ce cas ... J'ai vraiment besoin de laisser les détails de ViewState seuls et de simplement m'accrocher à ce qui est fait hors de la boîte.

La source
Translate

J'ai trouvé une solution assez élégante avecRadAjaxManager de Telerik. Cela fonctionne très bien, essentiellement vous enregistrez chaque contrôle qui pourrait appeler une publication, puis enregistrez chaque contrôle qui devrait être redessiné après que la publication soit effectuée de manière asynchrone. Le RadAjaxManager mettra à jour le DOM après la publication asynchrone et réécrira le ViewState et tous les contrôles affectés. Après avoir jeté un coup d'œil dans Reflector, il a l'air un peu kludgy sous le capot, mais cela convient à mes besoins.

La source
Translate

Je ne comprends pas pourquoi vous utiliseriez un contrôle personnalisé pour cela, alors que le UpdatePanel ASP.NET AJAX intégré fait la même chose.

Cela ajoute simplement plus de complexité, vous offre moins d'assistance et rend plus difficile le travail des autres sur votre application.

La source