Возможно ли перенаправить на другой вид SecondView()
после отправки запроса из angularjs. Я знаю, что угловые имеют что-то вроде $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>
Используйте обратный вызов ответа, чтобы проверить свои условия и сделать то, что там нужно:
$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 с сервера для выполнения условной проверки
Вопрос немного расплывчатый, чтобы иметь возможность предоставить более подробную информацию
Нет, если вы делаете запрос AJAX, вы не сможете перенаправить серверный контроллер, поскольку клиент отвечает за навигацию в контексте, который вы объяснили. Я бы предложил либо проверить что-то в ответе JSON с сервера (myObject.shouldRedirect = true, либо URL-адрес, если на то пошло), либо проверить конкретный код ответа HTTP (200 vs something else), а затем выполнить перенаправление с Угловой контроллер.
Если вы хотите, чтобы это было асинхронно, используя tr Angle API, то да, $location.path
, безусловно, путь. Если вам действительно нужно пойти на что-то, что не реализует API истории (т.е. Вам нужно перенаправить перенаправление на более традиционную серверную), вы всегда можете перейти на window.location = 'xyz'
.