Я довольно неопытен в .net и только начал изучать MVC. Я столкнулся с проблемой, связанной с обнаружением нескольких контроллеров:
"Обнаружено несколько типов, которые соответствуют контроллеру с именем 'reviews'. Это может произойти, если маршрут, обслуживающий этот запрос ('{controller} / {action} / {id}' '), не указывает пространства имен для найдите контроллер, соответствующий запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода MapRoute, который принимает параметр namespaces.
Недавно я добавил новую область «Администратор» в свое приложение, и в этом у меня есть «ReviewController». В главной папке приложения также есть «ReviewController»:
ах - как новый пользователь я не могу опубликовать изображение, но в основном у меня есть "ReviewController" в "Контроллерах" и в "Области / Admin / Contollers".
На данный момент у меня настроено 2 маршрута:
Маршрут по умолчанию в Global.asax.vb
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
{"PowellCasting/Controllers"}
)
End Sub
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
System.Data.Entity.Database.SetInitializer(New System.Data.Entity.DropCreateDatabaseIfModelChanges(Of Models.PowellCastingEntites))
Database.SetInitializer(Of PowellCastingEntites)(New PowellCastingInitializer())
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers")
End Sub
Маршрут области в AdminAreaRegistration
Namespace PowellCasting.Areas.Admin
Public Class AdminAreaRegistration
Inherits AreaRegistration
Public Overrides ReadOnly Property AreaName() As String
Get
Return "Admin"
End Get
End Property
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}
)
End Sub
End Class
End Namespace
Изучив проблемы, с которыми я столкнулся, я добавил код:
Для моих контроллеров Admin определено правильное пространство имен
- Пространство имен PowellCasting.Areas.Admin, а не просто PowellCasting.
- У меня есть RegisterAllAreas, установленный в глобальном
- ControllerBuilder.Current.DefaultNamespaces.Add ("PowellCasting / Controllers") используется для указания маршрута по умолчанию.
Конкретная проблема, с которой я столкнулся сейчас, заключается в том, что при переходе к "/ Reviews" я получаю ошибку нескольких контроллеров, показанную выше, а именно:
* В запросе 'reviews' найдены следующие подходящие контроллеры:
PowellCasting.PowellCasting.Areas.Admin.ReviewsController
PowellCasting.PowellCasting.ReviewsController *
Я включил отладчик маршрута, который показывает только одно совпадение:
ах - как новый пользователь я не могу опубликовать изображение, но оно показывает:
Admin / {controller} / {action} / {id} как FALSE
и
{controller} / {action} / {id} как TRUE
Это как и ожидалось, поэтому я не знаю, почему я получаю проблему.
Я читал о перегрузке метода maproute пространством имен, но не смог найти пример в VB (загружает в c #). Но я попробовал это:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Areas/Admin/Controllers"}
)
End Sub
и
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Controllers"}
)
End Sub
но безуспешно.
Я уверен, что это должно быть просто, и я попробовал несколько вещей - это очень расстраивает. Любая помощь будет очень признательна.
Мой первый пост здесь - Привет! :)