2011-01-29 4 views
1

Comment créer un dictionnaire d'objets dans la session? Plus spécifiquement, j'ai une liste d'objets: MyList stocke MyObject comme le résultat d'une requête linq avec la date en paramètre.dictionnaire de stockage dans la session

List<MyObject> Mylist; 
MyList = GetObjects(TheDate); 

Maintenant, je voudrais stocker MyList dans l'objet de session dans un dictionnaire avec la date comme clé. Lorsque la page a besoin d'une liste de lecture pour une date spécifique, commencez par rechercher le dictionnaire et, s'il est vide pour cette date, récupérez les données de la requête GetObjects et stockez le résultat dans le dictionnaire de la session.

Quelle est la meilleure façon de faire cela?

Merci.

+0

J'ai essayé de créer un objet appelé MyDictio dans un fichier différent à l'intérieur d'un espace de noms appelé ObjectsSessions. Quand j'essaie "public class Dictionary ..." je ne reçois pas intellisense sur le mot-clé Dictionary. Où puis-je déclarer ce dictionnaire afin qu'il soit disponible dans chaque page? – frenchie

+0

try 'using System.Collections.Generic;' – BrokenGlass

+0

J'ai déjà cet espace de noms dans le fichier qui stocke mes objets (AppObjects.cs) et dans le fichier codebehind de l'aspx correspondant. – frenchie

Répondre

7

échantillon pour stocker un dictionnaire en session:

List<MyObject> Mylist; 
MyList = GetObjects(TheDate); 
Dictionary<DateTime> myDictionary = new Dictionary<DateTime>(); 
myDictionary[TheDate] = MyList; 
Session["DateCollections"] = myDictionary; 

Exemple pour la récupération de la session (devrait avoir null vérifier pour être sûr qu'il est là):

Dictionary<DateTime> myDictionary = (Dictionary<DateTime>) Session["DateCollections"]; 
+0

ok, merci! Si je déclare ce dictionnaire dans un code derrière le fichier, dois-je le déclarer dans chaque code derrière le fichier de l'application? – frenchie

+0

vous avez besoin de la partie de récupération dans chaque code derrière le fichier si vous avez besoin d'accéder au dictionnaire - la partie de stockage dont vous avez besoin naturellement quand vous voulez créer un nouveau dictionnaire. – BrokenGlass

+0

Est-ce une bonne idée de déclarer un dictionnaire dans la page maître? Je pense à créer une dizaine de dictionnaires de listes d'objets. – frenchie

2

Je voudrais créer une sorte de façade autour de l'accès aux variables de session, ce qui rend la récupération et la définition des valeurs très facile. De plus, vous n'avez pas à vous inquiéter d'obtenir des noms de variables de session corrects car ils sont tous stockés au même endroit. Exemple:

public static class SessionVars 
{ 
    public static Dictionary<DateTime> DateCollections 
    { 
     get { return (Dictionary<DateTime>)HttpContext.Current.Session["DateCollections"]; } 
     set { HttpContext.Current.Session["DateCollections"] = value; } 
    } 
} 

ensuite y accéder n'importe où dans votre code ressemblera à ceci:

var List<MyObject> mylist = SessionVars.DateCollections[TheDate];