在mvc控制器中登录后出现angularJs重定向问题

时间:2014-03-30 02:26:41

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

我正面临一个问题。我正在开发一个带有angular + mvc 4的登录表单。当我在登录过程后尝试重定向到另一个视图时,问题就出现了。

代码:

这是我的工厂:这个工厂在mvc控制器中对我的动作结果执行ajax调用,效果很好。

moduloRegistro.factory('loginRepository', function ($resource) {
    return {
        login: function (usuario) {
            return $resource('Acesso/Logar').save(usuario);
        }
    }
});

在我的控制器下方:我的控制器验证结果,如果一切正常,它会尝试重定向到新的URL

moduloRegistro.controller('LoginController', function ($scope, loginRepository, $location, toastr) {
    $scope.erroLogin = '';
    $scope.login = function (usuario) {
        loginRepository.login(usuario).$promise.then(
            function (response) {
                if (response.mensagemDeErro != undefined || response.mensagemDeErro != null)
                    toastr.error(response.mensagemDeErro);
                else
                    $location.url('Board/Programa');
            },
            function (erro) {
                toastr.error(erro.mensagemDeErro);
            }
        );
    };
});

这是我的模块:我在哪里配置要渲染到ng-view中的路径和模板。

var moduloRegistro = angular.module('moduloRegistro', ['ngRoute', 'ngResource']);


moduloRegistro.config(function ($routeProvider, $locationProvider) {
    $routeProvider.when('/',
        {
            templateUrl: '/Templates/Acesso/login.html', controller: 'LoginController'
        });
    $routeProvider.when('/Board/Programa',
        {
            templateUrl: '/Templates/Board/programa.html', controller: 'BoardController'
        });
    $locationProvider.html5Mode(true)
});

moduloRegistro.value('toastr', toastr);

这是我的RouteConfig:

routes.MapRoute(
              name: "Board SPA",
              url: "Board/{*catchall}",
              defaults: new { controller = "Board", action = "Index" }
          );

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Acesso", action = "Index", id = UrlParameter.Optional }
            );

问题:当他重定向到新视图时,BoardController没有工作,我的主视图spa页面中的html在ng-view中呈现。

我的董事会的控制人员和工厂:

//Controller.
moduloRegistro.controller('BoardController', function ($scope, boardRepository, $location, toastr) {
    $scope.partes = boardRepository.getPartes();
});

//Factory
moduloRegistro.factory('boardRepository', function ($resource) {
    return {
        getPartes: function () {
            return $resource('Board/ObterPartesEscola').get();
        }
    }
});

2 个答案:

答案 0 :(得分:0)

查看定义路线时可以使用的解析功能。可在此answer

中找到更多信息

答案 1 :(得分:0)

不是这个特定问题的解决方案,而只是一些代码风格...

此:

moduloRegistro.config(function ($routeProvider, $locationProvider) {
$routeProvider.when('/',
    {
        templateUrl: '/Templates/Acesso/login.html', controller: 'LoginController'
    });
$routeProvider.when('/Board/Programa',
    {
        templateUrl: '/Templates/Board/programa.html', controller: 'BoardController'
    });
$locationProvider.html5Mode(true)
});

看起来好多了:

 moduloRegistro.config(function ($routeProvider, $locationProvider) {
    $routeProvider.when('/',
        {
            templateUrl: '/Templates/Acesso/login.html', 
            controller: 'LoginController'
        })
    .when('/Board/Programa',
        {
            templateUrl: '/Templates/Board/programa.html', 
            controller: 'BoardController'
        });
    $locationProvider.html5Mode(true)
 });

每当您多次使用某项服务时,您可以通过不使用分号并使用“.whatever”进行链接将它们链接在一起。