urls and angularjs with mvc



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

事情就是这样。当我的应用程序加载时,我调用一个MVC控制器,它加载一个MVC视图,其中包含一个ng视图。这反过来加载了我的主要角度视图。这很管用。然后,我选择一些选项并单击"保存",然后转到我的成功视图。(Angular对此处理得很好)。然而,当我尝试直接进入我的成功视图时,我从服务器返回了一个404错误。

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

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

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

我的角度路线

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时失败吗。

您的路由仍然会从url获得控制器。因此,如果导航到/success,则路线将提取success作为控制器名称。

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

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

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

最新更新