2016-05-14 56 views
0

是否有可能在angularjs的發佈請求後重定向到另一個視圖SecondView()。我知道角有點像$location.path。但我想檢查控制器中的一些條件。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請求,您將無法讓您的服務器端控制器重定向您,因爲客戶端負責在您解釋的上下文中進行導航。我會建議在服務器(myObject.shouldRedirect = true,或者URL)中檢查一些你的JSON響應,或者檢查一個特定的HTTP響應代碼(200與其他東西),然後執行重定向角控制器。

如果你希望它是使用thr Angular API進行異步的,那麼是的,$location.path是迄今爲止的路要走。如果你確實需要去做一些沒有實現歷史API的東西(即你需要更傳統的服務器端重定向),你總是可以去尋找window.location = 'xyz'

+0

實際上,服務器應該總是響應客戶端,爲什麼不把這個響應解析成有意義的東西(比如url重定向?),請檢查@charlietfl的答案。 –

+0

我很確定兩個答案都達到了相同的點:讓服務器以某種有效負載作出響應,然後基於此負載重定向或執行其他操作。 (爲了說明的目的,當我指出哪個控制器應該處理重定向時,我只是添加了Angular這個詞 - 當你在同一句話中談論Web API和Angular時,事情往往會變得模糊不清。) – napo

相關問題