Я довольно неопытный с .net и только начал изучать MVC. Я столкнулся с проблемой, связанной с обнаружением нескольких контроллеров:ASP NET MVC Area routing/multiple routes issue in VB
«Было найдено несколько типов, которые соответствуют контроллеру с именем« обзоры ». Это может произойти, если маршрут, обслуживающий этот запрос ('{controller}/{action}/{id} ') не определяет пространства имен для поиска контроллера, который соответствует запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода «MapRoute», который принимает параметр «пространства имен».
Я недавно добавил новую область «Админ» к моему приложению и в рамках этого у меня есть «ReviewController». Существует также «ReviewController» в основной папке приложения:
ah - как новый пользователь Я не могу опубликовать изображение, но в основном у меня есть «ReviewController» в «Контроллерах» и в разделе «Области/Админ/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
После прочтения вокруг проблемы, которые у меня были, я добавил несколько бит кода:
Мои контроллеры админки имеют право пространство имен определено
- пространство имен PowellCasting.Areas.Admin, а не просто PowellCasting.
- У меня есть значение RegisterAllAreas в глобальном
- ControllerBuilder.Current.DefaultNamespaces.Add («PowellCasting/Controllers») используется для указания маршрута по умолчанию.
Конкретная проблема у меня сейчас является то, что, когда я иду в «/ Отзывы» я показал ошибку несколько контроллеров выше, а именно:
* Просьба о «обзоров» Нашла следующие контроллеры соответсвующей : PowellCasting.PowellCasting.Areas.Admin.ReviewsController
PowellCasting.PowellCasting.ReviewsController *
Я включил маршрута отладчик и показывает только один матч:
ах - как новый пользователь не может опубликовать изображение, но оно показывает:
Администратор/{контроллер}/{действие}/{ID}, как FALSE,
и
{контроллер }/{action}/{id} as 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
, но без успеха.
Я уверен, что это должно быть просто, и я пробовал несколько вещей - это очень неприятно. Любая помощь могла бы быть полезна.
Мое первое сообщение здесь - Привет! :)
Спасибо за быстрый ответ - это сработало! :) Я все еще пытаюсь обойти все это, но это начинает иметь смысл. Я попытался перейти к «/ admin», и это не удалось, но это было также до моего пространства имен, содержащего «PowellCasting». Как только я это понял, это сработало. В очередной раз благодарим за помощь. – Ian