2009-08-21 15 views
8

Tengo un escenario en el que estoy en una página de vista y llamo a un método de acción en el controlador A que llama a otra acción en el controlador B a través de un retorno RedirectToAction, y esta acción devuelve la vista que ya estoy activada.RedirectToAction no actualiza la página

Quiero que la página se actualice para reflejar las actualizaciones del estado del sistema que estas dos acciones han realizado, pero MVC parece decidir que la página no necesita actualizarse ya que volveré a la misma vista. ¿Cómo fuerzo una actualización?

Ejemplo:

//user is on A/index, and submits a form that calls this in contoller B 
public ActionResult ActionInControllerB() 
{ 
    //do stuff 
    return RedirectToAction(ActionNames. ActionInControllerA, ControllerNames.A); 
} 

public ActionResult ActionInControllerA() 
{ 
    //do stuff 
    return View("index"); 
} 
+0

Lo que está haciendo suena razonable, y sí, el resultado no tiene sentido. ¿Es posible pegar el código de los 2 métodos en los 2 controladores diferentes? –

+0

Agregó el código como lo pidió. Gracias David – Dan

+0

hmm, sí, como se sospecha nada extraño allí. Mira lo que piensas de mi respuesta a continuación ... –

Respuesta

0

Voy a ser un poco vaga aquí, ya que no estoy muy seguro pero he visto algo en este sentido antes (y nadie más está respondiendo). Es posible que el problema sea que la transacción de actualización aún no se ha procesado o eliminado antes de la redirección. Por ejemplo, NHibernate a veces espera para confirmar una actualización de la base de datos hasta que pienso después de que se procesa la respuesta.

Si este es el caso, entonces lo que sea que obtenga en el controlador A simplemente no recoge los cambios. Tal vez podrías intentar de algún modo forzar el procesamiento de la confirmación de la base de datos.

Lo siento, pero esa es la única posibilidad que se me ocurre. ¡Tendrás que ponerte tu equipo de google-fu y diadema!

+0

Desafortunadamente este no es el problema. Mi ORM ha hecho todo su trabajo, y hay otros bits del lado del cliente que deben aparecer en cualquier caso. – Dan

+0

oh bien :-(Si realmente estás atascado, puedes probar Response.Redirect (Request.Url.ToString()) pero si eso funciona, entonces es una solución y una complicada. –

0

Tuve un problema como este en mi proyecto. Lo que podría estar pasando, supongo que está actualizando su vista en ActionInControllerB y luego cuando RedirectToAction está borrando esa vista. Tuve un problema como este en el que no estaba actualizando en mi controlador GET: y solo estaba actualizando en el controlador POST :. Por lo tanto, lo que quería mostrar no se acercaba. Por lo tanto, le sugiero que simplemente se asegure de que los cambios en la pantalla estén sucediendo en el lugar correcto.

Soy bastante nuevo en MVC, así que podría estar malinterpretando su pregunta y si lo estoy, lo siento. Pero, espero que esto te ayude al menos un poco.

7

Supongo que te encuentras con problemas de almacenamiento en caché.

Decora tu ActionInControllerB y métodos ActionInControllerA con:

[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)] 
1

tuve un problema similar, pero partió de llamada AJAX desde el archivo de vista en el archivo de controlador. El controlador hizo una actualización de la base de datos y luego llamó a RedirecToAction para actualizar la vista. Pero no actualizar ... Ninguna de las respuestas anteriores me ha ayudado. La única manera de que pudiera resolver era mediante el uso de un método diferente para llamar a una acción en el archivo de vista:

window.location = "Experiment/DeleteExperiment?experimentId=" + $("#DeleteExperimentButton").val(); 

partir de ese momento todo lo actuado como lo esperaba.

Cuestiones relacionadas