Domanda

Sono abbastanza inesperto con .NET e ho appena iniziato a imparare MVC. Ho riscontrato un problema riguardante più controller che si trovano:

"Sono stati trovati più tipi che corrispondono al controller denominato" recensioni ". Questo può accadere se il percorso che serve questa richiesta ('{controller}/{action}/{id}') non specifica gli spazi dei nomi per cercare un controller corrispondente che corrisponde la richiesta. Se questo è il caso, registra questa rotta chiamando un sovraccarico del metodo "MapRoute" che prende un parametro "spazi dei nomi".

Di recente ho aggiunto una nuova area "amministratore" alla mia app e all'interno di ciò ho un "reviewcontroller". C'è anche un "reviewcontroller" nella cartella dell'app principale:

AH - Come nuovo utente non riesco a pubblicare un'immagine, ma fondamentalmente ho un "reviewcontroller" in "controller" e in "aree/amministratore/contoller".

Ho 2 percorsi impostati finora:

Percorso predefinito in 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

Percorso dell'area in amministrazione

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

Dopo aver letto i problemi che stavo riscontrando, ho aggiunto una serie di bit di codice:

I miei controller di amministrazione hanno definito lo spazio dei nomi giusto

  • Spazio nomi powellcasting.areas.admin piuttosto che semplicemente powellcasting.
  • Ho registrato l'articolo globale
  • ControllerBuilder.Current.DefaultNamesPaces.Add ("Powellcasting/Controllers") è in atto per specificare il percorso predefinito.

Il problema specifico che ho ora è che quando vado a "/recensioni" ricevo l'errore di più controller mostrato sopra, in particolare:

*La richiesta di "recensioni" ha trovato i seguenti controller di corrispondenza: powellcasting.powellcasting.areas.admin.reviewscontroller

Powellcasting.powellcasting.reviewscontroller*

Ho abilitato il debugger del percorso e questo mostra solo una partita:

Ah - Come nuovo utente non riesco a pubblicare un'immagine ma mostra:

Admin/{controller}/{action}/{id} come false

e

{Controller}/{action}/{id} come true

Questo è come previsto, quindi non so perché sto ricevendo il problema.

Ho letto di sovraccaricare il metodo MapRoute con lo spazio dei nomi, ma non sono riuscito a trovare un esempio in VB (carichi in C#). Ma ho provato questo:

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

e

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

Ma senza successo.

Sono sicuro che questo dovrebbe essere semplice e ho provato una serie di cose - è molto frustrante. Qualsiasi aiuto sarebbe molto apprezzato.

Il mio primo post qui - Ciao! :)

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top