2010-09-17 8 views
5

Existe-t-il d'autres alternatives ViewState? J'ai entendu beaucoup Like Session, en gardant l'état de certains des contrôles de la page et en se détruisant au moment où l'utilisateur quitte la page.Alternatives ViewState dans les formulaires Web ASP.NET

Je sais que je suis en train de décrire ViewState lui-même, mais je cherche un modèle de sortes ou de suggestions pour éviter complètement ViewState.

Un exemple de comment je l'utilise est où je stocke le contenu de ma grille (une liste de ViewModels) à ViewState. Cela permet de savoir quelles entrées sont sales, celles qui ont été modifiées, leurs index, les objets actuellement sélectionnés, etc.

Répondre

3

Un de mes collègues a développé un moyen de stocker les données viewstate dans un fichier. Ainsi, les données viewstate lourdes ne sont pas transmises entre le client et le serveur. Juste une clé (qui est le fichier de données viewstate) qui représente le fichier de données viewstate est tenue comme une variable de session. Dans nos tests, nous avons constaté que l'enregistrement de viewstate dans le fichier diminuait le temps de réponse du serveur en diminuant la quantité de viewstate (ce qui était très important).

Dans ce "article" sous "Garder l'état d'affichage sur le serveur", vous pouvez trouver comment cette méthode peut être implémentée. Vous pouvez même stocker les données viewstate dans une table de base de données, ce qui donne une flexibilité supplémentaire si votre application est sur une batterie de serveurs Web.

+0

Bien que cela ne semble pas être une alternative, vous pouvez augmenter les performances de votre application sans changer toute l'architecture. – Zafer

+0

Je vais certainement examiner cela. – Jonn

0

Vous avez Session, et vous avez .

La session est par utilisateur, Le cache est global.

Avez-vous vraiment besoin de stocker tout cela dans ViewState? Pourquoi pouvez-vous soumettre (mais vous êtes très vague dans votre question si je fais quelques hypothèses ici) obtenir toutes les anciennes données de la DB, le comparer avec vos nouvelles données, et mettre à jour ce qui est changé?

+0

Je me sens plus à l'aise d'avoir l'état de résidence dans mes vues ViewModels. (Je ne garde que les choses que je sens vraiment nécessaires pour que le contrôle fonctionne.) Tout le reste est recréé en postback. Ne pas obtenir de la DB, recréer les ViewModels, et ensuite faire les comparaisons être plus lent en général? – Jonn

1

Une autre option consiste à compresser votre ViewState. Il ajoute encore en vrac à l'aller-retour, mais généralement c'est minime.

Si vous utilisez .Net 4, il y a quelques nouveaux ajouts ViewState utiles:

ASP.NET 4.0: more control on viewstate management

+0

Tsk. Nous développons encore la plupart de nos applications dans .Net 3.5. – Jonn

1

Je ne pense pas que vous faites une affaire pour se éloigner de ViewState.

Si vous détenez une grande quantité de données, vous rencontrerez des problèmes si vous persistez ailleurs. Session? ça va faire exploser votre consommation de mémoire, ou si c'est hors processus, vous allez déplacer tout ça à chaque fois que la session est chargée/écrite (une fois par requête). Vous pouvez bien sûr essayer de limiter le problème en libérant les données stockées dès que possible/comme TempData dans asp.net MVC.

Vous pouvez réduire la quantité d'informations que vous devez stocker pour vérifier les enregistrements modifiés en introduisant une version d'horodatage ou d'enregistrement. De cette façon, vous pouvez simplement vérifier si une nouvelle version a été ajoutée, et montrer à l'utilisateur à la fois ce qu'ils ont essayé de sauvegarder et ce que quelqu'un d'autre a enregistré.

Questions connexes