2012-08-09 3 views
5

Je sais que ce sujet a été traité dans de nombreux messages, mais je ne peux tout simplement pas le résoudre.Stockage d'objet dans la session

Dans un contrôleur Dans un objet ActionResult, je souhaite stocker un objet dans la session et le récupérer dans un autre objet ActionResult. Comme ça:

public ActionResult Step1() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Step1(Step1VM step1) 
    { 
     if (ModelState.IsValid) 
     { 
      WizardProductVM wiz = new WizardProductVM(); 
      wiz.Step1 = step1; 
      //Store the wizard in session 
      // ..... 
      return View("Step2"); 
     } 
     return View(step1); 
    } 

    [HttpPost] 
    public ActionResult Step2(Step2VM step2) 
    { 
     if (ModelState.IsValid) 
     { 
      //Pull the wizard from the session 
      // ..... 
      wiz.Step2 = step2; 
      //Store the wizard in session again 
      // ..... 
      return View("Step3"); 
     } 
    } 

Répondre

16

Stockage de l'assistant:

Session["object"] = wiz; 

Obtenir l'assistant:

WizardProductVM wiz = (WizardProductVM)Session["object"]; 
+0

Thx pour votre réponse cela fonctionne comme un charme :-) –

+0

Je luttais en liant à un affichage plus en profondeur d'un objet dans une liste. C'est exactement ce dont j'avais besoin. Je vous remercie. –

2

Si vous en avez seulement besoin sur l'action suivante et que vous prévoyez de la mémoriser à nouveau, vous pouvez utiliser TempData. TempData est fondamentalement le même que Session, sauf qu'il est "supprimé" lors de l'accès suivant, d'où la nécessité de le stocker de nouveau comme vous l'avez indiqué.

http://msdn.microsoft.com/en-us/library/dd394711(v=vs.100).aspx

Si possible cependant, il peut être préférable de déterminer un moyen d'utiliser les paramètres affichés pour passer dans les données nécessaires plutôt que de compter sur la session (TempData ou autre)

+0

Merci pour votre réponse! Cela fonctionne mais j'ai choisi la manière de la session comme solution parce que je peux récupérer mon objet n'importe où tout en naviguant dans mon assistant. –

+0

Le lien ci-dessus est mort maintenant. 'Ce sujet n'est plus disponible' - dit le site. –

+0

J'ai mis à jour le lien vers la nouvelle version – Shawn