我有一個公司區域的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()。
我只是想補充說,這應該添加到路由表中,而不是替換現有的路由表。此外,添加時,它應該高於您當前使用的默認路由,因爲它是更具體的路由。 – Tommy 2013-04-07 02:45:51
感謝您的回答,但我會考慮這種解決方法。在非區域默認控制器中不需要新路線來使其工作。默認路由(由MVC模板添加的路由)可以很好地訪問DefaultController上的操作,而無需在URL中指定控制器名稱。我更新了我的問題,提供了更多關於令我感到困惑的細節。 – AndrewR 2013-04-07 04:07:33