2011-12-17 33 views
5

Cosa sto facendo male con il mio codice MVC qui? La vista indice include un modulo che si sottomette a se stesso, quello che vorrei fosse il controller per elaborare il modulo inviato e quindi tornare alla visualizzazione.RedirectToAction non aggiorna la pagina come previsto

In realtà, il modulo viene elaborato correttamente, ma la vista restituita è come se nulla accadesse (ad esempio, gli ID che sono stati cancellati sono ancora visualizzati). Se aggiorno manualmente la pagina, viene visualizzata nuovamente correttamente. Non penso che sia correlato alla memorizzazione nella cache di broswer, poiché il reindirizzamento alla stessa vista da un altro controller funziona correttamente. Come posso ripararlo?

public ViewResult Index() 
    { 
     return View(GetComments()); 
    } 


    [HttpPost] 
    public ActionResult Index(int[] AllIds) 
    { 
     if (AllIds != null) 
     { 
      foreach (int id in AllIds) 
      { 
       // do stuff 
      } 
     } 

     return RedirectToAction("Index"); 
    } 

Edit: Al momento della presentazione del modulo, il punto di interruzione sul primo metodo non viene colpito e cercando di "Step Into (F11)" la linea return RedirectToAction("Index"); appena si sposta direttamente sul finale } invece.

+0

Quindi il POST aggiorna i dati che vengono recuperati da GetComments()? Dopo il POST, GetComments() dovrebbe restituire dati diversi? – danludwig

+0

Sì, il POST aggiorna/elimina gli stessi dati selezionati da GET. – mikel

risposta

4

Installa Fiddler o Firebug per Firefox e guarda il traffico, vederlo restituisce davvero una nuova risposta o un HTTP 304 dal browser (pagina memorizzata nella cache). Se tutto si verifica, si verifica un problema con la persistenza e le query del database.

1

Hai provato questo? Mi chiedo, a seconda di come si persistono i dati, se non viene salvato fino a quando il server non restituisce una risposta ..?

public ViewResult Index() 
{ // breakpoint 
    var comments = GetComments(); // debug and inspect the value of this variable 
    return View(comments); 
} 


[HttpPost] 
public ActionResult Index(int[] AllIds) 
{ 
    if (AllIds != null) 
    { 
     foreach (int id in AllIds) 
     { 
      // do stuff 
     } 
    } 

    return RedirectToAction("Index"); // breakpoint 
} 

So che alcune persone usano un IUnitOfWork in MVC che chiama solo SaveChanges/commit sul ORM alla fine della richiesta. È possibile che il // do stuff rimuova gli elementi dalla raccolta, ma non rimanga nel db fino a quando non viene restituito GET Index()?

Aggiornamento

Invece di ritorno RedirectToAction("Index"), hai provato RedirectToAction(Index())?

0

Provare ad immettere anche il nome del controller. Questo mi ha aiutato. Ad esempio:

return RedirectToAction("Index","Home"); 
Problemi correlati