2009-11-25 7 views
1

Le problème que j'ai est la suivante:Quelque chose comme viewstate et session

J'ai actuellement une classe personnalisée qui génère des boutons et les place sur un espace réservé sur une page maître.

Les événements de ces boutons placent des valeurs spécifiques dans une session qui diffèrent des valeurs d'une requête de base de données. En substance, les boutons servent de filtres pour les graphiques. Après avoir créé tous les boutons, j'ai réalisé que les valeurs de session resteront constantes d'une page à l'autre, donc chaque fois qu'un utilisateur entre une page différente alors qu'une autre est ouverte, les filtres sélectionnés sur la page ouverte resteront constants pour la nouvelle page c'est ouvert. Au début, je voulais utiliser viewstate plutôt que session, mais je me suis rendu compte qu'une page maître et une page de contenu ne partageaient pas le même état de vue.

À l'heure actuelle, je pense utiliser un préfixe pour la clé de sesson qui permettra d'identifier la page pour laquelle les filtres existent réellement. Cependant, je ne veux pas surcharger la session avec de nombreuses valeurs si l'utilisateur souhaite avoir plusieurs pages ouvertes en même temps.

Des solutions qui impliqueraient un moyen de partager viewstate (ou un autre moyen de stocker des valeurs) entre app_code, le maître et la page de contenu?

+0

Donc, ce que vous dites est que lorsque vous redirigez vers une nouvelle page, vous voulez avoir les filtres avec les valeurs par défaut et non les valeurs de la page précédente? –

+0

Je suis un autre développeur sur ce projet. Une partie du problème est le système que nous utilisons pour afficher différents graphiques a quatre écrans.Chaque écran (avec une instance de navigateur) doit être capable de garder une trace de ce qu'il filtre différemment de chacun des autres. D'où notre utilisation initiale de viewstate. La session est juste une instance, donc quand vous mettez à jour un navigateur, il utilise tous les filtres de la dernière modification sur l'une des autres instances. – Maximillian

+0

Combien de temps sont les valeurs du filtre et combien y en a-t-il? Avez-vous considéré la requête d'URL? –

Répondre

1

Utilisez HttpContext.Current.Items, il s'agit d'une collection de paires clé-valeur avec une durée de vie d'une seule requête HTTP.

+0

Cela semble être la bonne direction pour mon problème. Toutefois, étant donné qu'il n'a qu'une durée de vie pour une seule requête, l'utilisateur peut-il sélectionner plusieurs filtres et conserver ces valeurs dans les différentes sélections? – BlankenshipMQ

+0

Dans le cas de plusieurs pages, donc plusieurs requêtes HTTP, non, cela ne fonctionnera pas. – joerage

0

Combien de filtres parlons-nous ici? Stockez les valeurs de filtre dans l'URL. Avez-vous vu certaines des URL que google ou un site de commerce électronique utilise? Ils sont assez longs. Voici comment je le fais:

  1. je stocke les valeurs de filtre dans la requête comme, www.chart.com?filter1=val1 & filtre2 = val2 etc.
  2. I utilisateur JQuery's query plugin pour manipuler la requête sur la côté client, puis demander à nouveau le graphique à partir du serveur, en utilisant la nouvelle requête.
  3. De cette façon, je ne suis pas junking session, cookies, ou quoi que ce soit, et si l'utilisateur veut stocker un signet à un tableau particulier ou l'envoyer par courriel à un ami, ils peuvent et les filtres sont conservés.
0

Si les données ne sont pas trop longues, les cookies sont une solution typique.

Une autre option consiste à utiliser le stockage isolé Silverlight. Le contrôle Silverlight lui-même pourrait être invisible (pas d'interface utilisateur).

Questions connexes