2013-05-07 2 views
0

, связанные:Несколько типов нашли ошибку маршрутизации, даже если пространство имен указано

Multiple types were found that match the controller named 'Home'

Multiple types were found that match the controller named 'Home' - In two different Areas


Несколько типов были найдены, что и контроллер с именем 'FW.

просьба о 'FW' нашел следующие контроллеры соответствия:

app.Controllers.Admin.FWController

app.Areas.Manage.Controllers.FWController

I попробовал предложения по этим связанным ссылкам. Я попытался дифференцировать контроллеры с использованием различных пространств имен:

Global.asax.cs

routes.MapRoute(
"Default", // Route name 
"{controller}/{action}/{id}", 
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, 
new string[] { "app.Controllers" } 
); 
routes.MapRoute(
"Default_Admin_Top", // Route name 
"{controller}/{action}/{id}", // URL with parameters 
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, 
new string[] { "app.Controllers.Admin" } 
); 

в области управления ManageAreaRegistration

public override void RegisterArea(AreaRegistrationContext context) 
{ 
context.MapRoute(
    "Manage_default", 
    "Manage/{controller}/{action}/{id}", 
    new { action = "Index", id = UrlParameter.Optional }, 
    new string[] { "app.Areas.Manage.Controllers" } 
); 
} 

Я также посмотрел в папке bin для старой версии но был только текущий.

Что мне не хватает? Похоже, это должно сработать.

Проблема, кажется, вращается вокруг того, что я дал мой контроллер свое собственное пространство имен не будучи в своей области:

namespace app.Controllers.Admin 
{ 
public class FWController : Controller{} 
} 

Удаление .Admin из пространства имен здесь будут удалены столкновения, а также ошибка , но я не совсем понимаю, почему.

ответ

1

Вы можете попробовать и повредить свои гниения именно так. Проблема может возникнуть из-за того, что app.Controllers.Admin находится в app.Controller

routes.MapRoute(
"Default_Admin_Top", // Route name 
"{controller}/{action}/{id}", // URL with parameters 
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, 
new string[] { "app.Controllers.Admin" } 
); 
routes.MapRoute(
"Default", // Route name 
"{controller}/{action}/{id}", 
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, 
new string[] { "app.Controllers" } 
); 
0

похоже на проблему, с которой я столкнулся в последнее время.

в соответствии с вашим сценарием и испытав ту же проблему, я подозреваю, что проблема будет заключаться в соглашении об именах с контроллерами. Скажем, например, ваше приложение имеет контроллер с именем FWController в вашей корневой структуре до реструктурирования/поддержки вашего кода в отдельных областях. когда ваше приложение запускается, метод Application_Start() внутри файла Global.asax регистрирует маршрут для маршрутизации таблицы сбора (одна из основных функций шаблона MVC 3), которая поддерживает ваш входящий запрос, когда метод действия выполняется внутри контроллера.

Проблема возникает, когда у вас есть контроллер с таким же именем, как в вашем случае. FWController и структура каталогов области как-то имитирует корневой каталог так же, как вы видите в одном из ссылок.

Я осуществил подобное решение в качестве одного из URL оправдывается, т.е.

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, //Parameter defaults    
    new []{"MyProject.WWW.Controllers"} 
); 

я не трогал мой файл зоны registration.cs вообще.

При переименовании имен, ваша маршрутизация начинает указывать на app.Controllers.FWController (не в app.Areas.Manage.Controllers.FWController), который разрешен конфликт, который происходил раньше, потому что вы указали это в Global.asax

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", 
    new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, 
    new string[] { "app.Controllers" } 
); 

, что запрос также пренебрегает MapRoute который содержит .admin namespace. Возможно, это и есть причина, по которой я верю. Надеюсь, это тебе помогло.

Смежные вопросы