url和angularjs与mvc

时间:2014-08-28 10:20:08

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

直接在浏览器的网址栏中输入网址时,我的角度路线出现问题。

这是怎么回事。当我的应用程序加载时,我调用一个MVC控制器,它加载一个MVC视图,其中包含一个ng-view。然后这又加载我的主要角度视图。这非常有效。然后我选择一些选项并单击“保存”,然后将我路由到我的成功视图。 (Angular很好地照顾了这一点)。但是,当我尝试直接进入我的成功视图时,我从服务器返回404错误。

现在我知道这是因为MVC中没有一条路由可以解决这个问题,但是有一条路由应该重定向到我的主MVC索引视图,而后者又会加载我的角度应用程序。

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

现在我希望当我刷新一个页面时,这个控制器会被调用,它应该加载我的角度应用程序,角度路由接管并显示正确的视图,但这根本不会发生。

我的角度路线

parts of the URL omitted

angular.module('app', ['ngRoute', 'restangular']).config([
    '$routeProvider', 'RestangularProvider', '$locationProvider', function ($routeProvider, RestangularProvider, $locationProvider) {
        $locationProvider.html5Mode(true);
        $routeProvider.
            when('/**/**/**/settings', {
                templateUrl: 'App/globalsettings/templates/globalsettings.html',
                controller: 'globalsettingsCtrl'
            }).
            when('/**/**/**/success', {
                templateUrl: 'App/globalsettings/templates/success.html',
            }).
            when('/**/**/**/error', {
                templateUrl: 'App/globalsettings/templates/error.html',
            }).
            otherwise({ redirectTo: '/**/**/**/settings' });

        RestangularProvider.setBaseUrl("api");
    }
]);

在刷新页面或直接输入URL时,任何人都可以回答我的路由失败的原因。

1 个答案:

答案 0 :(得分:0)

您的路线仍会从网址获取控制器。因此,如果您导航到/success,则路由正在提取success作为控制器名称。

您可以尝试重命名路线中的controller段,这样控制器将始终获得默认值Settings。例如,将路线定义为:

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

您可以将该网址段重命名为对您更有意义的内容,只要它不是controller