ASP.NET MVC 如何使用相同的 Controller 名稱
- 2010-12-11
- 29639
- 0
- ASP.NET MVC Routes 技巧
在 ASP.NET MVC 2.0 以後增加了一個 Area(區域)的概念,對於區分開不同模組或是共同開發的時候相當好用,A區域的不會影響到B區域,但是如果很不巧的使用到了相同的 Controller 名稱,那可是會發生錯誤的,一開始可能會以為這是個限制,但是仔細想想,都已經有了區域概念卻還互相影響是很蠢的,因此我們可以利用 Router 的限制規則來排除這個問題,讓個別的區域開發者可以不用顧慮到命名的問題。
依據下圖可以看到,一個網站中包含了兩個 HomeController。
並且裡面都有一個 Action 叫做 Index
當網站去執行首頁的時候就會跳出錯誤
找到多個與名為 'Home' 的控制器相符的型別。如果服務此要求 ('{controller}/{action}/{id}') 的路由沒有指定命名空間以搜尋符合該要求的控制器,就會發生這個情況。在這種情況下,請呼叫可接受 'namespaces' 參數的 'MapRoute' 方法的多載來註冊此要求。
因此我們需要利用 命名空間的限制來告訴 Router 我只要找這命名空間的 Controller
開啟 Global.asax
routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // URL 及參數 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值 );
將上面這預設的 MapRoute 改成下面
routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // URL 及參數 new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 參數預設值 new string[] { "MvcApplication1.Controllers" } //指定了命名空間 );
再來連一次就完全正常了
回應討論