2012-01-10 9 views
7

Estoy tratando de pasar un string al azar desde mi Controller al View.Uso de ViewData para pasar cadena de Controlador a Vista en ASP.NET MVC3

Aquí es mi Controller código:

[HttpPost] 
    public ActionResult DisplayForm(UserView user) 
    { 
     //some data processing over here 
     ViewData["choice"] = "Apple"; 

     return RedirectToAction("Next", "Account"); 
    } 

Ahora quiero pasar ese valor de dato "Apple" a mi modo de ver Next.cshtml que se crea de la siguiente manera:

//View: Next.cshtml 

    @{ 
    ViewBag.Title = "Thanks for registering"; 
    Layout = "~/Content/orangeflower/_layout.cshtml"; 
    } 
    <p>Your favorite fruit is:</p>@ViewData["choice"] 

pero no soy capaz para ver mis datos en el navegador cuando se ejecuta el proyecto.

Aquí es la instantánea:

1) En la depuración, el controlador muestra el valor:

enter image description here

2) La vista del navegador no muestra el valor de la "Apple"

enter image description here

3) En la depuración adicional de mi Next.cshtml Ver: enter image description here

¿Por qué el valor no se pasa a la vista correctamente? Mis dos controladores para Next y DisplayForm están dentro del mismo Controlador AccountController.cs, aún no se muestra el valor.

¿Alguien me puede ayudar a resolver esto?

Respuesta

11

No está visualizando, está redirigiendo. Si usted quiere pasar un poco de información TYO la vista tiene que devolver este punto de vista después de añadirlo a ViewData:

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    ViewData["choice"] = "Apple"; 

    return View(); 
} 

Si desea pasar un mensaje que va a sobrevivir después de una redirección que podría utilizar TempData en lugar de ViewData.

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    TempData["choice"] = "Apple"; 

    return RedirectToAction("Next", "Account"); 
} 

continuación, dentro de la acción siguiente que se ha podido obtener los datos de TempData y guardarlo dentro de ViewData para que la vista puede leerlo.

+0

ohh, así que necesito escribir la vista de retorno ("Siguiente", "Cuenta") según mi código correcto si no estoy redirigiendo? –

+0

@ParthDoshi, sí, si desea usar ViewData directamente. Pero si desea mantener el patrón Redirigir-Después-Publicar puede usar TempData como se muestra en mi respuesta. –

+0

gracias, funcionó !! :) –

1

Realiza una publicación - redirigir - obtener. El ViewData se está configurando para esta solicitud, que devuelve un redireccionamiento, borrando el ViewData, luego ocurre otra solicitud que no tiene los datos. Use TempData en su lugar y se agregará automáticamente al ViewData en la próxima solicitud.

+1

gracias! fue muy útil de hecho. –

+0

Muy buen diseño de pregunta y explicación. –

+0

Gracias! A veces siento que StackOverflow debería permitirnos aceptar dos respuestas, una primaria y la otra como respuesta secundaria.Aunque recibí una respuesta de otro usuario, sentí que tu respuesta también fue lo suficientemente buena para que entendiera el error en mi código, así que gracias por la respuesta rápida. –

Cuestiones relacionadas