AngularJS发布到控制器并重定向到另一个页面

时间:2016-05-14 23:18:44

标签: javascript angularjs asp.net-mvc-4

在angularjs发布请求后,是否可以重定向到另一个视图SecondView()。我知道棱角有点像$location.path。但我想检查控制器中的一些条件。

的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 个答案:

答案 0 :(得分: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 :(得分:-1)

不,如果您正在发出AJAX请求,您将无法让服务器端控制器重定向您,因为客户端负责在您解释的上下文中进行导航。我建议从服务器检查你的JSON响应中的某些内容(myObject.shouldRedirect = true,或者URL),或者检查特定的HTTP响应代码(200 vs vs else)然后从中重定向角度控制器。

如果你希望它使用thr Angular API进行异步,那么是的,$location.path是目前为止的方法。如果你真的需要去做一些没有实现History API的东西(也就是说,你需要更传统的服务器端重定向),你总是可以去window.location = 'xyz'