ASP Net MVC Area Routing / Multiple Routes Issue dans VB
-
30-10-2019 - |
Question
Je suis assez inexpérimenté avec .NET et je viens de commencer à apprendre MVC. J'ai rencontré un problème concernant plusieurs contrôleurs trouvés:
"Plusieurs types ont été trouvés qui correspondent au contrôleur nommé 'Reviews'. Cela peut se produire si l'itinéraire qui services cette demande ('{contrôleur} / {Action} / {id}') ne spécifie pas les espaces de noms pour rechercher un contrôleur qui correspond La demande. Si tel est le cas, enregistrez cet itinéraire en appelant une surcharge de la méthode «MapRoute» qui prend un paramètre «Espaces de noms».
J'ai récemment ajouté une nouvelle zone "Admin" à mon application et à l'intérieur, j'ai un "ReviewController". Il existe également un "ReviewController" dans le dossier d'application principale:
Ah - En tant qu'utilisateur, je ne peux pas publier une image, mais en gros, j'ai un "reviewController" dans "Controllers" et dans "Zones / Admin / Contollers".
J'ai 2 routes configurées jusqu'à présent:
Route par défaut dans 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
Voie de la zone dans l'administration
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
Après avoir lu les problèmes que j'avais, j'ai ajouté un certain nombre de bits de code:
Mes contrôleurs d'administration ont le bon espace de noms défini
- Espace de noms Powellcasting.areas.admin plutôt que simplement Powellcasting.
- J'ai un registre de registre dans le monde
- ControllerBuilder.current.defaultNamespaces.add ("Powellcasting / Controllers") est en place pour spécifier l'itinéraire par défaut.
Le problème spécifique que j'ai maintenant est que lorsque je vais à "/ critiques", j'obtiens l'erreur des contrôleurs multiples indiqués ci-dessus, en particulier:
* La demande de «revues» a trouvé les contrôleurs de correspondance suivants: Powellcasting.powellcasting.areas.admin.reviewsController
Powellcasting.powellcasting.reviewsController *
J'ai activé le débogueur de route et cela ne montre qu'une seule correspondance:
Ah - En tant qu'utilisateur, je ne peux pas publier une image mais cela montre:
Admin / {contrôleur} / {action} / {id} comme faux
et
{contrôleur} / {action} / {id} comme vrai
Ceci est comme prévu, donc je ne sais pas pourquoi je reçois le problème.
J'ai lu sur la surcharge de la méthode MapRoute avec l'espace de noms, mais je n'ai pas trouvé d'exemple dans VB (charges en C #). Mais j'ai essayé ceci:
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
et
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
Mais sans succès.
Je suis sûr que cela devrait être simple et j'ai essayé un certain nombre de choses - c'est très frustrant. Toute aide sera grandement appréciée.
Mon premier post ici - Salut! :)
Pas de solution correcte