當在MVC中添加多個Areas的時候,如果Area下面的控制器的類名和控制器和全局的某個控制的類名和控制器名稱相同的時候,打開全局的url的時候,會出現類似的情況。提示如下:
找到多個與名為“Home”的控制器匹配的類型。如果為此請求(“{controller}/{action}/{id}”)提供服務的路由在搜索匹配此請求的控制器時沒有指定命名空間,則會發生此情況。如果是這樣,請通過調用含有“namespaces”參數的“MapRoute”方法的重載來注冊此路由。
這個情況出現后,網絡上搜索能找到的解決方法為:在Areas下面的RegArea中做修改如下,加上一個 new string[]{ 后面是當前Area中的Controllers的命名空間
- public override void RegisterArea(AreaRegistrationContext context)
- {
- context.MapRoute(
- "Buyer_default",
- "Buyer/{controller}/{action}/{id}",
- new { action = "Index", id = UrlParameter.Optional }
- , new string[] { "Chihou.Shop.Web.Seller.Controllers" }
經過測試后,發現問題無法那樣解決,根據上面提供的思路,在Global.ascx.cs下面修改如下,
- public static void RegisterRoutes(RouteCollection routes)
- {
- routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- routes.MapRoute(
- "Default", // 路由名稱
- "{controller}/{action}/{id}", // 帶有參數的 URL
- new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值
- , new string[] { "Chihou.Shop.Web.Controllers" }
- );
- }
做個記錄以備忘記,或者后來者使用。
- 上一篇:Nuget沒辦法使用了。