2012-08-09 20 views
5

Sé que este tema ha sido tratado en numerosas publicaciones, pero no puedo resolverlo.Almacenamiento de objetos en la sesión

Dentro de un controlador Dentro de un ActionResult Me gustaría almacenar un objeto en la sesión y recuperarlo en otro ActionResult. Así:

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"); 
     } 
    } 

Respuesta

16

Almacenamiento del asistente:

Session["object"] = wiz; 

Conseguir el asistente:

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

Thx por su respuesta funciona como un encanto :-) –

+0

Estaba luchando por vincular a una visualización más en profundidad de un objeto en una lista. Esto es exactamente lo que necesitaba. Gracias. –

2

Si solo lo necesita en la siguiente acción y planea almacenarlo de nuevo, puede usar TempData. TempData es básicamente lo mismo que Session, excepto que se "elimina" en el siguiente acceso, por lo tanto, la necesidad de almacenarlo nuevamente como ha indicado que está haciendo.

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

Si es posible, sin embargo, puede ser mejor para determinar una manera de utilizar los parámetros enviado a pasar los datos necesarios en lugar de confiar en la sesión (TempData o de otra manera)

+0

¡Gracias por tu respuesta! Funciona, pero elegí el método de sesión como solución porque puedo recuperar mi objeto en cualquier lugar mientras navego en mi asistente. –

+0

El enlace de arriba está muerto ahora. 'Este tema ya no está disponible' - dice el sitio. –

+0

He actualizado el enlace a la nueva versión – Shawn

Cuestiones relacionadas