2008-09-18 8 views
2

Quelle est la meilleure façon de stocker des données de chaîne à travers la publication. J'ai besoin de stocker un identifiant et un nom pour plusieurs entités. Je pensais utiliser un datatable dans viewstate, mais est-ce que cela ferait que viewstate deviendrait trop grand? Je ne peux pas encore utiliser une base de données car je vais insérer un enregistrement auquel ces autres enregistrements doivent être associés. Je vais donc les stocker temporairement jusqu'à ce que l'utilisateur soumette le formulaire.stocke l'état à travers la publication

Répondre

4

Vous avez réellement beaucoup d'options - celui que vous choisirez dépendra entièrement des exigences de votre propre application.

  1. ViewState - vous pouvez ajouter les données à l'affichage de la page. Les avantages de ceci est que les données vont vivent seulement pour la durée de vie de l'utilisateur étant sur la page et le poster sur le serveur. Un autre avantage par rapport aux champs cachés est qu'il est plus difficile pour les utilisateurs de pirater et modifier vos valeurs (je crois, en fait, que vous pouvez crypter votre viewstate). L'inconvénient, bien sûr, réside dans les tailles de page - tout ce que vous ajoutez à l'état d'affichage est une chose qui reste sur la page d'un utilisateur et est ensuite renvoyé au serveur. Cela le rend non-optimal pour stocker de grandes quantités de données.

  2. Cookies - Vous pouvez renvoyer l'information à l'utilisateur sous la forme de cookies. Dans ce cas, vous pouvez indiquer combien de temps dureront les informations - pour la portée de l'utilisateur ayant son navigateur ouvert, ou pour une heure de calendrier spécifique. L'information sera disponible à n'importe quelle page de votre application chaque fois que l'utilisateur frappe cette page. Les mauvaises nouvelles sont que vous êtes limité dans la quantité d'informations que vous pouvez stocker, et que les utilisateurs peuvent très facilement modifier leurs propres cookies. Session - Vous stockez les informations de l'utilisateur sur la mémoire de votre propre serveur (je laisserai de côté la discussion sur les différents types de stockage de session). Dans ce cas, les informations seront conservées pendant la durée de vie de la session de votre utilisateur et seront disponibles pour toutes les pages de votre application. Il n'y a aucun risque que l'utilisateur modifie ces valeurs directement, bien que le détournement de session soit un risque que vous souhaitiez explorer. L'inconvénient, cependant, est que vous utilisez des ressources serveur précieuses dans ce cas - si votre application a une charge importante, cela peut affecter votre évolutivité dans le futur.

Comme je l'ai dit - ce que vous choisissez de faire dépend entièrement des besoins et des exigences de votre application.

+0

Grande répondre mais pourrais-je demander la clarté sur un article s'il vous plaît? J'ai utilisé 'chaîne statique' pour persister à travers les publications, mais si j'ai deux utilisateurs différents remplissant leurs données uniques (c'est-à-dire leur prénom) en même temps, leurs deux enregistrements obtiennent le même nom, pas leur nom unique. Légèrement confus encore quant à ce qui précède sera local pour chaque client et non affecté par les données des autres clients. Les cookies et la session ont l'air bien, mais les cookies sont-ils uniques à chaque client? Les sessions sont-elles uniques à chaque client, même si elles sont stockées dans la mémoire propre de votre serveur? – FlashTrev

0

vous pouvez simplement les stocker dans un cookie, cela vous permettra également d'y accéder à partir de Javascript. Vous pouvez également stocker un tableau de chaînes simple dans l'état d'affichage. Beaucoup dépend de quoi et combien d'informations vous souhaitez stocker.

1

plusieurs façons (mais pas d'une liste exhaustive):

  • ViewState
  • champs cachés
  • session
  • chaîne de requête
  • cookies
1

ViewState est très bien. Si vous le stockez entre plusieurs publications, une solution côté client est la meilleure. Donc, vous ajouteriez de la taille quelque part - soit dans ViewState ou dans des champs cachés.

Si vous voulez faire ce côté serveur, vous pouvez utiliser la Session, mais n'oubliez pas de le nettoyer lorsque vous le pouvez.

0

Lorsque j'ai ce scénario, je crée une structure pour mes champs que je place dans Viewstate.Je suis d'accord pour avoir une petite structure ajoutée dans la taille de la page et le cycle de vie compte tenu de l'ensemble des contrôles de la page est déjà là :)

En outre, il se nettoie après lui-même après que vous avez terminé avec la page, donc il n'y a pas inquiétant à propos de remplir votre session avec de la merde.

0

Je souscris aux accepted answer mais je voudrais également ajouter que si vous voulez seulement garder la trace d'une collection simple clé/valeur que vous seriez mieux mettre un dictionnaire générique en soit ViewState ou session:

Dictionary<int, string> myValues = new Dictionary<int, string>(); 
myValues.Add(1, "Apple"); 
maValues.Add(2, "Pear"); 
Questions connexes