在asp.net mvc2之後的版本里面,有了area(區域的概念),這爲咱們開發中提供了很多方便的地方,可是很不湊巧,如果存在多個重名的controller就會發生錯誤,所以咱們能夠根據router的規則來解決這個問題。mvc
錯誤提示:asp.net
咱們能夠根據錯誤提示來解決這個問題,在MapRoute方法添加namespaces參數,代碼以下:url
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 9 namespaces:new []{"MvcApplication8.Controllers"} 10 ); 11 }
加上命名空間後,就會按照命名空間去找相應的控制器,這個問題就解決了。spa
解決這個問題,咱們能夠使用Route對象的DataTokens屬性來指定命名空間列表。DataTokens.Add()方法,咱們能夠理解爲存儲於Route對象的DataTokens屬性中,對應的Key爲「Namespaces」。這兩個問題的解決方法有類似之處。.net
代碼:3d
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 name: "Default", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 9 namespaces: new[] { "MvcApplication8.Controllers" } 10 ).DataTokens.Add("area","admin"); 11 }
其中defaults裏面的controller和action爲area裏面設置起始頁面的controller和action方法。code
不少人爲這個默認起始頁發愁,都找不到!router