AngularJS Опубликовать на контроллере и перенаправить на другую страницу

0

Возможно ли перенаправить на другой вид 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>
Теги:
asp.net-mvc-4

2 ответа

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, вы не сможете перенаправить серверный контроллер, поскольку клиент отвечает за навигацию в контексте, который вы объяснили. Я бы предложил либо проверить что-то в ответе JSON с сервера (myObject.shouldRedirect = true, либо URL-адрес, если на то пошло), либо проверить конкретный код ответа HTTP (200 vs something else), а затем выполнить перенаправление с Угловой контроллер.

Если вы хотите, чтобы это было асинхронно, используя tr Angle API, то да, $location.path, безусловно, путь. Если вам действительно нужно пойти на что-то, что не реализует API истории (т.е. Вам нужно перенаправить перенаправление на более традиционную серверную), вы всегда можете перейти на window.location = 'xyz'.

  • 0
    На самом деле сервер всегда должен отвечать клиенту, так почему бы не проанализировать этот ответ во что-то значимое (например, перенаправление URL-адреса?) Проверить ответ @charlietfl.
  • 0
    Я почти уверен, что оба ответа достигают одной и той же точки: пусть сервер отвечает какой-то полезной нагрузкой, затем на основе этого перенаправляет или делает что-то еще. (Для пояснения я просто добавил слово Angular, когда ссылаюсь на то, какой контроллер должен обрабатывать перенаправление - вещи, как правило, становятся неоднозначными, когда вы говорите о Web API и Angular в одном предложении.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню