2012-01-10 11 views
7

Sto provando a passare un numero casuale string dal mio Controller allo View.Utilizzo di ViewData per passare la stringa dal controller alla vista in ASP.NET MVC3

Ecco il mio codice Controller:

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

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

Ora voglio passare quel valore di dati "Apple" per mio punto di vista Next.cshtml che viene creato nel modo seguente:

//View: Next.cshtml 

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

Ma io non sono in grado per vedere i miei dati nel browser quando viene eseguito il progetto.

Ecco l'istantanea:

1) In data di debug, il controller che mostra il valore:

enter image description here

2) La vista del browser non mostra il valore di "Apple"

enter image description here

3) Su ulteriore debug al mio Next.cshtml Visualizza: enter image description here

Perché il valore non viene trasmesso correttamente alla vista. Entrambi i miei controller per Next e DisplayForm si trovano nello stesso controller AccountController.cs, il valore ancora non viene visualizzato.

Qualcuno può aiutarmi a risolvere questo?

risposta

11

Non stai visualizzando una vista, stai reindirizzando. Se si voleva passare alcune informazioni tyo la vista è necessario restituire questo punto di vista dopo l'aggiunta al ViewData:

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

    return View(); 
} 

Se si vuole passare un messaggio che sopravviverà dopo un reindirizzamento si potrebbe usare TempData invece di ViewData.

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

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

poi dentro l'azione successiva si potrebbe recuperare i dati da TempData e conservarlo all'interno Viewdata in modo che la vista possa leggerlo.

+0

ohh quindi ho bisogno di scrivere il ritorno Visualizza ("Avanti", "Account") come da codice giusto se non sto reindirizzando? –

+0

@ParthDoshi, sì, se si desidera utilizzare direttamente ViewData. Ma se vuoi mantenere il pattern Redirect-After-Post puoi usare TempData come mostrato nella mia risposta. –

+0

grazie ha funzionato !! :) –

1

Si sta eseguendo un post - reindirizzamento - get. Il ViewData viene impostato per questa richiesta, che restituisce un reindirizzamento, cancellando lo ViewData, quindi accade un'altra richiesta che non ha i dati. Utilizzare invece TempData e verrà aggiunto automaticamente allo ViewData alla richiesta successiva.

+1

grazie! è stato davvero molto utile. –

+0

Layout e spiegazione di una domanda molto buona. –

+0

Grazie! A volte penso che StackOverflow ci consenta di accettare due risposte, una primaria e l'altra come risposta secondaria.Anche se ho ricevuto una risposta da un altro utente, ho sentito che la tua risposta era abbastanza buona per farmi capire l'errore nel mio codice, quindi grazie per la rapida risposta –

Problemi correlati