2013-04-07 78 views
0

我有一個公司區域的MVC4應用程序。MVC4區域路線:默認控制器上的操作方法

給定的文件結構:

Areas 
\ 
    Companies 
    \ 
    Controllers 
     | 
     DefaultController (Contains Index and Edit actions) 
     TestController (Contains Index and Test action) 

我希望我的網址是這樣的:

  • /公司
  • /公司/編輯
  • /公司/測試
  • /公司/測試/測試

我的路線設置就像在我的CompaniesAreaRegistration類中一樣。

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

結果:

  • /公司 - 工程
  • /公司/編輯 - 404
  • /公司/默認/編輯 - 工程
  • /公司/測試 - 作品
  • /公司/測試/測試 - 工程

如何在URL中訪問我的DefaultController.Edit()動作而沒有「默認」?

更新

基於Brad的回答,我知道我可以硬編碼這樣的路徑,它會工作。我真的希望有更多的自動解決方案。我不知道我將在某個區域的默認控制器上執行多少操作。我不想爲每個人創建一條新路線。

這是作爲App_Start/RouteConfig.cs文件中MVC模板的一部分添加的默認路由。

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

如果我對HomeController有一個名爲「Test」的操作,那麼我可以使用URL/Test命令執行該操作。我不需要添加一個像「/ Test/{id}」這樣的URL的新路由,以便它能夠正常工作。它似乎忽略URL的{controller}部分並使用默認的控制器配置。

爲什麼在一個區域中這樣做會改變?

區域路由與默認路由完全相同,除了URL的「公司/」前綴。

作爲測試,我將默認路由URL更改爲url: "Example/{controller}/{action}/{id}",並且我仍然能夠通過URL/Example/Test訪問HomeController.Test()。

回答

2

使用:

context.MapRoute(
    name: "Companies_Edit", 
    url: "Companies/Edit/{id}", 
    defaults: new { controller = "Default", action = "Edit", id = UrlParameter.Optional } 
); 

記住參數填充左到右(不能跳過{controller}只有填充{action}。如果你想要假設{controller},請在defaults中指定它)

+0

我只是想補充說,這應該添加到路由表中,而不是替換現有的路由表。此外,添加時,它應該高於您當前使用的默認路由,因爲它是更具體的路由。 – Tommy 2013-04-07 02:45:51

+0

感謝您的回答,但我會考慮這種解決方法。在非區域默認控制器中不需要新路線來使其工作。默認路由(由MVC模板添加的路由)可以很好地訪問DefaultController上的操作,而無需在URL中指定控制器名稱。我更新了我的問題,提供了更多關於令我感到困惑的細節。 – AndrewR 2013-04-07 04:07:33

相關問題