2016-11-28 11 views
3

を使用して別のコントローラからメソッドを呼び出そうとしています。しかし、それは動作しません。説明してください、私が間違っていることはありますか?ASP.Net MVC Ajaxリクエストのサーバーから新しいページにリダイレクト

[HttpPost] 
public ActionResult AddToWishList(int id, bool check) 
{ 
    var currentUser = WebSecurity.CurrentUserId; 
    if (currentUser != -1) 
    { 
     // ...    
    } 
    else 
    { 
     return RedirectToAction("Login", "Account"); 
    }    
} 

私はHTMLでメソッドを呼び出す:

<script> 
$(document).ready(function() { 
    /* call the method in case the user selects a checkbox */ 
    $("#checkbox".concat(@Model.Id)).change(function() { 
     $.ajax({ 
      url: '@Url.Action("AddToWishList", "Item")', 
      type: 'POST', 
      data: { 
       id: '@Model.Id', 
       check: this.checked 
      } 
     }); 
    }); 
}); 

私が使用している場合はそれが機能:

success: function (result) { 
    window.location.href = "@Url.Content("~/Account/Login")"; 
} 

しかし、私はログインしてナビゲートする必要はありません( )をクリックするたびに、ユーザーが承認されていない場合に限ります。コントローラでリダイレクトを使用する方法を教えてください。

+5

Ajax投稿は非同期で、JavaScriptを使用してリダイレクトする必要があります。あなたはajax経由で投稿リクエストを作成することはできず、サーバーのエンドポイントでブラウザを新しいウィンドウに移動させることはできません。 –

+0

$( "#checkbox")を実行する前にif @ model.id!= -1を入れてみてください... – nocturns2

答えて

4

あなたは基本的にJavaScriptResultを返す応答JavaScriptをすることができます。

[HttpPost] 
public ActionResult AddToWishList(int id, bool check) 
{ 
    return JavaScript("window.location='/Account/Login'"); 
} 
+0

@KarlGjertsen何が問題なのですか?この回答は、MVCの 'ActionResult'を返します。 – trashr0x

+0

私の間違い、私は質問と答えを誤解しました。 –

+0

@KarlGjertsen問題ありません。私はそれを明確にするために答えを更新しました。 – Win

1

あなたのActionResultで[HTTPPOST]を使用していることがわかります。この回答を確認してください https://stackoverflow.com/a/129361/713789

https://stackoverflow.com/a/16643549/713789を確認してください。

+0

上記リンクありがとうございました – Egor

+0

このリンクがあなたに役立つ場合は、アップアップすることもできます。 – Adrian

+0

うん、私はすでにやった。投票は記録されていますが、表示されません。 – Egor

関連する問題