2013-11-15 17 views
31

Quanto segue non reindirizzare la mia pagina: Ecco il codice MVC:RedirectToAction non funziona dopo il post di jquery ajax di successo?

[HttpPost] 
    public ActionResult GoHome() 
    { 
     return RedirectToAction("Index", "Home"); 
    } 

Qui è il post ajax:

$.support.cors = true; 

      $.ajax({ 
       type: "POST", 
       url: "http://localhost/UserAccount/GoHome", 
       dataType: 'json', 
       crossDomain: true 
      }); 

Il post è successo e quando hists l'azione GoHome non lo fa reindirizzare all'azione indice del controller principale.

+0

'$ .support.cors = true;' non è necessario. 'crossDomain: true' non è necessario. –

risposta

55

Non è possibile reindirizzare da un post AJAX. Puoi comunque restituire l'URL che desideri reindirizzare al browser e reindirizzare da Javascript.

controller

[HttpPost] 
public ActionResult GoHome() 
{ 
    return Json(Url.Action("Index", "Home")); 
} 

Javascript

 $.ajax({ 
      type: "POST", 
      url: "http://localhost/UserAccount/GoHome", 
      dataType: 'json', 
      crossDomain: true, 
      success: function(data){ 
       window.location.href = data; 
      } 
     }); 
+0

Salve, questo è principalmente per la sicurezza, quindi non è possibile reindirizzare il browser di un utente a una pagina che potrebbe avere uno script dannoso? – xaisoft

+0

@xaisoft penso che sia più una mancanza di funzionalità che una decisione di sicurezza. –

+0

@xaisoft No, è una limitazione HTTP. Durante un normale PRG (Post, Redirect, Get), il server riceve un modulo POST, lo elabora e restituisce un reindirizzamento HTTP 301/302 su un'altra pagina che il browser riceve e segue. JS/AJAX non sa come gestire un reindirizzamento 301/302 poiché si aspetta una risposta HTTP 200 con un carico utile (Json, HTML, testo) collegato con esso. – Tommy