在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>
答案 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'
。