2013-11-15 24 views
31

次は私のページにリダイレクトしない:ここではMVCのコードは次のとおりです。ここでjquery ajax投稿が成功した後にRedirectToActionが機能しない?

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

は、Ajaxのポストです:

$.support.cors = true; 

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

ポストは成功し、それがGOHOMEアクションをhistsときにはしていませんホームコントローラのインデックスアクションにリダイレクトします。

+0

'$ .support.cors =真;'必要ありません。 'crossDomain:true'は必要ありません。 –

答えて

55

AJAXポストからリダイレクトすることはできません。ブラウザをリダイレクトするURLを返すこともできますが、Javascriptからリダイレクトすることもできます。

コントローラ

[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

こんにちは、これは主にセキュリティのためですか?そのため、悪意のあるスクリプトを含む可能性のあるページにユーザーのブラウザをリダイレクトすることはできません。 – xaisoft

+0

@xaisoft私はそれがセキュリティの決定よりも機能の欠如だと思う。 –

+0

@ xaisoftいいえ、HTTPの制限です。通常のPRG(Post、Redirect、Get)の間、サーバーはフォームPOSTを受け取り、それを処理し、HTTP 301/302リダイレクトをブラウザが受け取って別のページに戻します。 JS/AJAXはペイロード(Json、HTML、text)を添付したHTTP 200応答を期待しているので、301/302リダイレクトの処理方法を知らない。 – Tommy

関連する問題