[英]Multiple Controllers with one Name in ASP.NET MVC 2
嘗試運行我的ASP.NET MVC應用程序時收到以下錯誤:
對'Account'的請求找到了以下匹配的控制器:
uqs.Controllers.Admin.AccountController
MvcApplication1.Controllers.AccountController
我在項目中搜索了MvcApplication1.Controllers.AccountController
來刪除它,但我找不到匹配項。
我嘗試注冊修復它的路線:
routes.MapRoute(
"LogAccount", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "LogOn", id = "" },
new string[] { "uqs.Controllers.Admin" } // Parameter defaults
);
但這並沒有解決它。
找到了多個匹配名為“帳戶”的控制器的類型。
我該如何解決這個問題?
如果您重構項目並將默認命名空間和程序集從“MVCApplication1”更改為“uqs”,則最終可能會在bin目錄(新目錄和舊目錄)中使用2個程序集。 您可以收到此錯誤,因為AccountController在兩個程序集中。
清理舊MVCApplication1.dll的bin目錄。
您的應用程序中不能有多個名為Account
控制器,即使在不同的命名空間中也是如此。
您必須按Area
(ASP.NET MVC 2中的一項功能)拆分這些控制器。
如果您執行Find for AccountController
您將在應用程序中找到名為Account
所有控制器; 如果你想要它們,或者刪除它們,將它們移到不同的Areas
。
有同樣的問題。 清理垃圾桶,我很高興。
即使提供了名稱空間,也可能發生問題的輕微混淆(類似於它導致相同的錯誤消息)。 我認為MVC 3在這方面比MVC 2更有吸引力。
簡答:
確保控制器的命名空間實際上是MapRoute
調用中指定的命名空間!!
答案很長 :
我有3個區域: default ("")
/ Facebook
/ Store
,每個區域都有AdminController
我有這樣的路由映射(對於我的默認區域):
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
new string[] { "RR.Controllers.Main" }
);
對/ admin的請求發出以下錯誤:
找到了多個與名為“admin”的控制器匹配的類型。 如果為此請求提供服務的路由('{controller} / {action} / {id}')未指定名稱空間,則會發生這種情況......
對'admin'的請求找到了以下匹配的控制器:
RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController
但等一下! 我沒有指定控制器名稱空間....? 這是怎么回事.... ?
事實證明我的默認區域的管理員控制器名稱空間是RR_MVC.Controller
而不是Rolling_Razor_MVC.Controller.Main
。
出於某種原因,在MVC 2中這沒有出現問題,但在MVC 3中確實如此。 我認為MVC 3只是要求你在存在潛在的歧義時更加明確。
AccountController
由ASP.NET MVC Visual Studio模板自動生成。 它位於Controllers\\AccountController.cs
。 嘗試在項目中搜索並刪除它。
我有這個問題......
通過刪除其中一個.csproj文件中的項目引用來解決此問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.