2009-07-23 5 views
0

J'ai, par exemple. une page de liste avec des entrées de filtre, à partir de laquelle l'utilisateur peut accéder à une page de capture, où il pourrait passer du temps à capturer, avant de revenir à la page de liste. Quand ils reviennent à la page de liste, je voudrais que leur filtre précédent soit automatiquement appliqué à nouveau.Recherche d'un motif pour conserver les valeurs des champs de page en revenant à la page

Ce n'est pas un problème de science-fiction, donc je suis sûr qu'il y a déjà une myriade de solutions, mais j'espère obtenir quelques réponses ici qui m'éclairent quant aux modèles couramment utilisés pour résoudre ce problème. Mon idée immédiate est pour un objet de session pour la page 'pré-ensembles', avec un dictionnaire par page. Cela pourrait également être étendu à des pré-ensembles à plus long terme si stockés quelque part à plus long terme que la session.

Répondre

0

J'ai des fonctions d'aide dans une classe utilitaire où je passe les contrôles que je veux enregistrer ou charger à la session. Généralement, je vais appeler la charge sur le chargement de la page initiale, et appeler les fonctions de sauvegarde après que l'utilisateur exécute une recherche ou chaque fois que je veux enregistrer.

Je crée une nouvelle surcharge pour chaque type de contrôle que je veux enregistrer dans la session. En voici une pour un TextBox. Je ne suis pas sûr que ce soit un très bon code ou pas, mais cela semble fonctionner raisonnablement bien.

public void SaveToSession(TextBox control, HttpSessionState session, string SectionKey) 
{ 
    session[SectionKey + control.ID] = control.Text; 
} 

public string LoadFromSession(TextBox control, HttpSessionState session, string SectionKey, string DefaultValue) 
{ 
    string ReturnValue = ""; 
    if (session[SectionKey + control.ID] != null) 
    { 
     control.Text = session[SectionKey + control.ID].ToString(); 
     ReturnValue = session[SectionKey + control.ID].ToString(); 
    } 
    else 
    { 
     control.Text = DefaultValue; 
     ReturnValue = DefaultValue; 
    } 
    return ReturnValue; 

} 
1

La session est un bon endroit pour stocker ce genre d'information. Je ne vois aucune raison pour laquelle utiliser Session ne fonctionnerait pas pour vous dans ce cas.

1

oui vous pouvez stocker filtre pour chaque page dans un objet dictionnaire qui lui-même peut être mis en séance comme:

IDictionary<string,string> pageFilters; 
if(Session["filters"]==null){ 
    pageFilters = new Dictionary<string,string>(); 
    Session["filters"]=pageFilters; 
}else{ 
    pageFilters=(IDictionary)Session["filters"]; 
} 

if(pageFilters.ContainsKey(CURRENT_PAGE_NAME OR KEY)) 
{ 
    pageFilters[CURRENT_PAGE_NAME OR KEY]=/*FILTER FOR PAGE*/; 
}else{ 
    pageFilters[CURRENT_PAGE_NAME OR KEY]=/*FILTER FOR PAGE*/; 
} 
Questions connexes