2013-11-15 14 views
31

Die folgende meiner Seite nicht umleiten: Dies ist die MVC-Code:RedirectToAction funktioniert nicht nach erfolgreicher Jquery Ajax Post?

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

die Ajax-Post hier ist:

$.support.cors = true; 

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

Der Beitrag ist erfolgreich, und wenn es die Aktion GoHome hists tut es nicht Weiterleitung an die Indexaktion des Home Controllers.

+0

'$ .support.cors = true;' ist nicht erforderlich. 'crossDomain: true' wird nicht benötigt. –

Antwort

55

Sie können nicht von einem AJAX-Post umleiten. Sie können die URL, zu der Sie den Browser umleiten möchten, jedoch zurückgeben und von Javascript umleiten.

-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

Hallo, Ist dies hauptsächlich für die Sicherheit, so dass Sie den Browser eines Benutzers nicht auf eine Seite umleiten können, die möglicherweise ein bösartiges Skript enthält? – xaisoft

+0

@xaisoft Ich denke, es ist eher ein Mangel an Funktionalität als eine Sicherheitsentscheidung. –

+0

@xaisoft Nein, es ist eine HTTP-Beschränkung. Während eines normalen PRG (Post, Redirect, Get) empfängt der Server ein Formular-POST, verarbeitet es und gibt eine HTTP 301/302-Umleitung an eine andere Seite zurück, die der Browser empfängt und folgt. JS/AJAX weiß nicht, wie eine 301/302-Weiterleitung gehandhabt wird, da sie eine HTTP 200-Antwort erwartet, an die eine Nutzlast (JSON, HTML, Text) angehängt ist. – Tommy

Verwandte Themen