2011-12-17 11 views
5

¿Qué estoy haciendo mal con mi código MVC aquí? La vista de índice incluye un formulario que se envía a sí mismo, lo que me gustaría es que el controlador procese el formulario enviado y luego regrese a la vista.RedirectToAction no actualiza la página como se esperaba

Lo que ocurre en realidad es que el formulario se procesa correctamente, pero la Vista devuelta es como si nada ocurriera (por ejemplo, aún se muestran los ID que se han eliminado). Sin embargo, si actualizo manualmente la página, se muestra correctamente de nuevo. No creo que esté relacionado con el almacenamiento en caché de broswer, ya que redireccionar a la misma vista desde un controlador diferente funciona bien. Cómo puedo arreglarlo ?

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

Editar: Al enviar el formulario, el punto de ruptura en el primer método no es golpeado y tratando de "Paso a paso (F11)" la línea return RedirectToAction("Index"); sólo se mueve directamente a la final } lugar.

+0

Entonces, el POST actualiza los datos que se recuperan mediante GetComments()? Después del POST, GetComments() debería devolver datos diferentes? – danludwig

+0

Sí, el POST actualiza/borra los mismos datos que el GET selecciona. – mikel

Respuesta

4

Instalar Fiddler o Firebug para Firefox y ver el tráfico, verlo realmente devuelve una nueva respuesta o un HTTP 304 del navegador (página almacenada en caché). Si todo sale bien, entonces tienes un problema con tu persistencia de DB o consultas.

1

¿Has probado esto? Me pregunto, dependiendo de cómo persisten los datos, si no se guardará hasta que el servidor devuelva una respuesta ...?

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 
} 

Sé que algunas personas usan una IUnitOfWork en MVC que sólo llama SaveChanges/Commit en el ORM al final de la solicitud. ¿Es posible que // do stuff elimine elementos de la colección, pero no persista en el db hasta DESPUÉS de que se devuelva el índice GET()?

actualización

En lugar de retorno RedirectToAction("Index"), ¿ha intentado RedirectToAction(Index())?

0

Intente ingresar el nombre del controlador también. Eso me ayudó. Por ejemplo:

return RedirectToAction("Index","Home"); 
Cuestiones relacionadas