2014-08-28 76 views
1

當我直接在瀏覽器的URL欄中輸入URL時,我的角路由有問題。網址和angularjs與mvc

這是怎麼回事?當我的應用程序加載時,我調用一個MVC控制器,該控制器加載一個MVC視圖,其中包含一個ng視圖。然後這反過來加載我的主視角。這很好。然後我選擇一些選項,然後點擊保存,然後將我路由到我的成功視圖。 (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"); 
    } 
]); 

任何人都可以回答,爲什麼刷新頁面,或直接輸入網址時,我的路由失敗。

+0

你是否總是期望擊中控制器'Settings'? – 2014-08-28 10:27:23

+0

是的,我願意。設置是用於設置mini SPA的應用程序中唯一的MVC控制器。我的產品部分還有其他路線,但它們工作正常。 – 2014-08-28 14:29:09

回答

0

您的路線仍然會從網址獲取控制器。因此,如果您導航至/success,則路線將提取success作爲控制器名稱。

您可以嘗試重命名路徑中的controller段,這樣控制器將始終獲得默認值Settings。例如定義爲路徑:

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

你可以因爲它沒有被命名controller該URL段重命名爲一些更有意義的你,只要。

+0

這對我來說非常合適,謝謝 – 2014-09-02 08:09:06