2016-05-14 76 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

相关问题