Вызов Asp.Net MVC 5 View из контроллера AngularJS

0

Я пытаюсь перенаправить на домашнюю страницу после успешного входа в систему. В настоящее время я использую ASP.NET MVC 5, AngularJS, EntityFramework 6, шаблон начальной загрузки и репозитория. Ниже приведен код моего LoginController:

public JsonResult UserLogin(STUDENTMANAGEMENTUSER data)
    {
        var user = repository.UserLogin(data);
        return new JsonResult { Data = user, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

код для контроллера AngularJS:

app.controller("mvcLoginCtrl", function ($scope, loginAJService) {
$scope.IsLoggedIn = false;
$scope.Message = '';
$scope.Submitted = false;
$scope.IsFormValid = false;

$scope.LoginData = {
    USERNAME: '',
    USERPASSWORD: ''
};

//Check is Form Valid or Not // Here f1 is our form Name
$scope.$watch('f1.$valid', function (newVal) {
    $scope.IsFormValid = newVal;
});

$scope.Login = function () {
    $scope.Submitted = true;
    if ($scope.IsFormValid) {
        loginAJService.GetUser($scope.LoginData).then(function (d) {
            if (d.data.USERNAME != null) {
                $scope.IsLoggedIn = true;
                $scope.Message = "Successfully login done. Welcome " + d.data.FULLNAME;  
            }
            else {
                alert('Invalid Credential!');
            }
        });
    }
};});

и код для моего сервиса AngularJS:

app.service("loginAJService", function ($http) {

this.GetUser = function (d) {
    var response = $http({
        method: "post",
        url: "Login/UserLogin",
        data: JSON.stringify(d),
        dataType: "json"
    });
    return response;
};});

Я хочу перенаправить на Student/Index.cshtml после успешного входа в систему. Как я могу достичь этого?

Теги:
asp.net-mvc-5
entity-framework-6

2 ответа

0
Лучший ответ

Ты пробовал:

return Json 
(
   new {
           Data = user,
           JsonRequestBehavior = JsonRequestBehavior.AllowGet,
           redirectUrl = @Url.Action("UserLogin", "LoginController")
       }
);

А затем в угловом в $ http.post ждать успешного обратного вызова:

success: function(data) {
    window.location.href = data.redirectUrl;
}
1

Вы не имеете прямого доступа к представлению.cshtml. Вы получаете доступ к нему с помощью метода действий. Поэтому создайте метод действия, чтобы вернуть это представление (если оно еще не существует)

public ActionResult StudentIndex()
{
  // you may pass a view model to the view as needed
  return View("~/Views/Student/Index.cshtml");
}

Теперь в вашем успехе входа в систему просто переадресуйте этот метод действий.

if (d.data.USERNAME != null) {
      $scope.IsLoggedIn = true;
      $scope.Message = "Successfully login done. Welcome " + d.data.FULLNAME; 
      window.location.href='/YourControllerName/StudentIndex'; 
}

Поскольку вы выполняете перенаправление (совершенно новый запрос Http GET для StudentIndex, нет смысла устанавливать значения свойств области.

  • 0
    Спасибо за ваш ответ, это работает. Еще одна вещь, которую я хочу знать, я должен передать $scope.Message = "Successfully login done. Welcome " + d.data.FULLNAME; эта переменная для /Student/Index.cshtml view. Как я могу это сделать?
  • 0
    Вы должны следовать шаблону PRG. Поэтому запросите информацию о вашем пользователе в Student / Index и отобразите любое сообщение, которое вы хотите сделать.

Ещё вопросы

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