2016-05-14 13 views
0

anglejsからの投稿要求後に別のビューSecondView()にリダイレクトすることは可能ですか?私は角度が$location.pathのようなsomethigを持っていることを知っています。しかし、私はコントローラのいくつかの条件を確認したい。AngularJSコントローラへの投稿と別のページへのリダイレクト

はJavaScript

var MyApp = angular.module("MyApp", []); 
MyApp.controller("AppController", function ($scope,$http) { 
    $scope.onClick = function() { 
     $http({ 
      method: 'POST', 
      url: 'Home/CheckData/', 
      data: {name: 'Jhon'}, 
     }); 
    }; 
}); 

コントローラー:

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult CheckData(string name) 
    { 
     if (name=="Jhon") 
     { 
     return RedirectToAction("SecondView");} 
     else{ 
      return View(); 
     } 
    } 

    public ActionResult SecondView() 
    { 
     return View(); 
    } 
} 

Index.cshtmlあなたの条件をチェックして、そこに必要とされている何をすべきか

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<script src="~/Scripts/angular.js"></script> 
<script src="~/Scripts/MyScript.js"></script> 

<div ng-app="MyApp" ng-controller="AppController"> 
    <input ng-click="onClick()" type="button" value="Redirect" /> 
</div> 

答えて

2

使用応答コールバック:

$scope.onClick = function() { 
    $http.post('Home/CheckData/', { name: 'Jhon'}).then(function(resp) { 
    if (resp.data.someVar) { 
     // javascript redirect using `$location` 
    } else { 
     // set some scope variable to display error 
    } 
    }); 
}; 

あなたは条件付きチェックに

質問を行うには、サーバから適切なJSONを返す必要がありますは、より詳細な情報を提供することができるように少し曖昧である

-1

いいえ、あなたは、AJAX要求を作っている場合は、あなたあなたが説明したコンテキスト内でのナビゲーションをクライアントが担当しているため、サーバー側のコントローラからリダイレクトすることはできません。私は、あなたのJSONレスポンスの何かをサーバーから調べるか(myObject.shouldRedirect = true、その点についてはURL)、または特定のHTTPレスポンスコード(200対何か他のもの)を確認してからリダイレクトを行いますAngularコントローラ。

Angular APIを使用して非同期にしたい場合は、yes、$location.pathがあります。実際にヒストリーAPIを実装していないもの(伝統的なサーバー側のリダイレクトが必要なもの)に行く必要がある場合は、いつでもwindow.location = 'xyz'に行くことができます。

+0

実際には、サーバーは常にクライアントに応答する必要があります。その応答を意味のあるもの(たとえば、リダイレクトURL)を解析しないと、なぜ@charlietflの答えがチェックされません。 –

+0

私は両方の答えが同じポイントになっていることを確信しています。サーバが何らかの種類のペイロードで応答し、それに基づいてリダイレクトしたり、何か他のことをします。 (明確にするために、どのコントローラがリダイレクトを処理すべきかを言及するときにAngularという単語を追加しました.Web APIとAngularの場合はあいまいになりがちです) – napo

関連する問題