demoshop

demo, trying to be the best_

在 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" } //指定了命名空間
);

●再來連一次就完全正常了

ASP.NET MVC Routes 技巧 系列文章

回應討論