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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top