2012-01-09 56 views
14

我的項目中有兩個區域。現在,當我運行程序我得到這個錯誤:發現多個類型與名爲'Home'的控制器匹配 - 在兩個不同的區域

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter. 

The request for 'Home' has found the following matching controllers: 
BaseAdminMVC.Areas.BaseAdmin.Controllers.HomeController 
BaseAdminMVC.Areas.TitomsAdmin.Controllers.HomeController 

我已經在這裏找到了一些來源:Multiple Controller name
但我認爲它僅適用於一個區域。
就我而言,我在不同領域有兩個項目。希望有人能告訴我該怎麼做才能解決問題。
這裏是Global.asax文件:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      string[] namespaces = new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers", "BaseAdminMVC.Areas.TitomsAdmin.Controllers"}; 

      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
       namespaces 
      ); 
     } 

順便說一句,我也控制器( 「HomeController」)的Area文件夾之外。這只是提供了兩個項目BaseAdminTitomsAdmin的鏈接。提前

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

      routes.MapRoute(
       "BaseAdmin", 
       "BaseAdmin/{controller}/{action}", 
       new { controller = "Account", action = "Index" }, 
       new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers" } 
      ); 

      routes.MapRoute(
       "TitomsAdmin", 
       "TitomsAdmin/{controller}/{action}", 
       new { controller = "Home", action = "Index" }, 
       new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" } 
      ); 

謝謝!:

我已經試過這個解決方案,但仍然不起作用

+1

重新編輯:您必須將Default路徑向下移動(到最後一個地方)。訂單在這裏很重要。 – 2012-01-09 20:49:17

+0

@HenkHolterman仍然沒有工作。 – fiberOptics 2012-01-10 01:45:10

+0

目前還不清楚「不起作用」的含義。 – 2012-01-10 10:59:19

回答

18

我不知道發生了什麼,但是這個代碼工作正常:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" } 
    ); 
} 
+28

只是在...(我知道這是晚了一年),但我收到此錯誤,因爲我改變了我的輸出程序集的名稱和我的默認命名空間。我沒有意識到,將舊的編譯程序集(來自MVC3站點)放在項目的debug/bin文件夾中。當網站加載時,它會從舊程序集和新更名的程序集中選取家庭控制器,並拋出相同的錯誤。長話短說,我走進垃圾桶,取下舊的組件,一切都開始完美。 – OFConsulting 2012-11-24 05:34:45

+0

謝謝!我現在正在從4.0遷移到.Net 4.5。如果再次顯示相同的錯誤,您的提示可能會有所幫助。 – fiberOptics 2012-11-26 04:33:47

+1

@OFConsulting我知道我不應該在評論中說「謝謝」,但FU - * - 謝謝! – Ydhem 2013-09-07 15:28:11

6

我做我的項目命名空間/組件的重命名後,得到這個錯誤。

如果您重命名Namespace/Assembly,則可能會在bin文件夾中包含以前名稱的剩餘程序集/ dll。只要從那裏刪除它,它應該工作。

2

右鍵單擊項目並選擇清理項目。否則,請徹底清空bin目錄,然後再重新構建。這應該清除組件上的任何剩餘部分

相關問題