2009-08-21 13 views
8

Ho uno scenario in cui sono su una pagina di visualizzazione e chiamo un metodo di azione nel controller A che chiama un'altra azione nel controller B tramite un ritorno RedirectToAction e questa azione restituisce la vista che Im è già attiva.RedirectToAction che non aggiorna la pagina

Desidero che la pagina si aggiorni per riflettere gli aggiornamenti dello stato del sistema effettuati da queste due azioni, ma MVC sembra decidere che la pagina non deve essere aggiornata poiché sto tornando alla stessa visualizzazione. Come posso forzare un aggiornamento?

Esempio:

//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

Quello che stai facendo sembra ragionevole, e sì il risultato non ha senso. È possibile incollare il codice dei 2 metodi nei 2 controller diversi? –

+0

Aggiunto codice come richiesto. Grazie David – Dan

+0

hmm, sì come sospetto nulla di strano lì. Vedi cosa ne pensi della mia risposta qui sotto ... –

risposta

0

ho intenzione di essere un po 'vaga qui, dal momento che non sono davvero sicuro, ma ho visto qualcosa in questo senso prima (e nessun altro risponde). È possibile che il problema è che la transazione di aggiornamento non è stata ancora elaborata o svuotata prima del reindirizzamento. Ad esempio, NHibernate a volte attende di eseguire un aggiornamento del db finché non penso dopo che la risposta è stata elaborata.

In questo caso, qualsiasi operazione di recupero eseguita nel controller A non consente di raccogliere le modifiche. Forse potresti provare in qualche modo a forzare l'elaborazione del commit del database.

Scusa, ma questa è l'unica possibilità che riesco a pensare. Dovrai indossare il tuo vestito e la fascia di google-fu!

+0

Purtroppo questo non è il problema. Il mio ORM ha fatto tutto il suo lavoro, e ci sono altri bit lato client che dovrebbero apparire in entrambi i casi. – Dan

+0

oh, va bene :-(Se sei davvero bloccato puoi provare Response.Redirect (Request.Url.ToString()) ma se funziona, è una soluzione alternativa e disordinata. –

0

Ho avuto un problema come questo sul mio progetto. Quello che potrebbe accadere, suppongo sia che tu stia aggiornando la tua vista in ActionInControllerB poi quando RedirectToAction sta cancellando quella vista. Ho avuto un problema come questo in cui non stavo aggiornando nel mio GET: controller e stavo solo aggiornando nel POST: controller. Pertanto, ciò che volevo mostrare non stava venendo fuori. Quindi ti suggerisco di assicurarti che le tue modifiche al display stiano avvenendo nel posto giusto.

Sono abbastanza nuovo in MVC, quindi potrei semplicemente leggere erroneamente la tua domanda e se lo sono, mi dispiace. Ma spero che questo ti aiuti almeno un po '.

7

Immagino che tu stia incontrando problemi con la cache.

decorare la vostra ActionInControllerB e metodi ActionInControllerA con:

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

ho avuto problema simile, ma ha cominciato a chiamata AJAX dal file al fine di file di controllo. Il controller ha effettuato un aggiornamento al DB e quindi chiama RedirecToAction per aggiornare la vista. Ma nessun aggiornamento ... Nessuna delle risposte di cui sopra mi ha aiutato. L'unico modo ho potuto risolvere era utilizzando un metodo diverso per chiamare un'azione dal file di visualizzazione:

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

Da quel punto tutto ha agito come mi aspettavo a.

Problemi correlati