質問

私は.NETにかなり経験が浅く、MVCの学習を始めたばかりです。私は、複数のコントローラーが見つかっていることに関する問題にぶつかりました:

「「レビュー」という名前のコントローラーと一致する複数のタイプが見つかりました。これは、このリクエスト( '{Controller}/{action}/{id}')にサービスを提供するルートが、一致するコントローラーを検索する名前空間を指定しない場合に発生する可能性があります。リクエスト。これが当てはまる場合は、「名前空間」パラメーターを取得する「MapRoute」メソッドの過負荷を呼び出すことにより、このルートを登録してください。

最近、アプリに新しい「管理者」領域を追加しましたが、その中に「ReviewController」があります。メインアプリフォルダー内には「ReviewController」もあります。

AH-新しいユーザーとして画像を投稿することはできませんが、基本的には「コントローラー」と「エリア/管理者/コントラ」に「ReviewController」があります。

これまでに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

私が抱えていた問題を読んだ後、私は多くのコードを追加しました:

私の管理者コントローラーには、適切な名前空間が定義されています

  • namespace powellcasting.areas.adminは、単にpowellcastingではなく。
  • 私はグローバルに設定されたRegisterAllareasを持っています
  • controllerbuilder.current.defaultnamespaces.add( "PowellCasting/Controllers")がデフォルトのルートを指定するために導入されています。

私が今持っている特定の問題は、「/レビュー」に行くと、特に上記の複数のコントローラーエラーが表示されることです。

*「レビュー」のリクエストにより、次の一致するコントローラーが見つかりました:powellcasting.powellcasting.areas.admin.reviewscontroller

powellcasting.powellcasting.reviewscontroller*

ルートデバッガーを有効にしましたが、1つの一致のみが表示されます。

ああ - 新しいユーザーとして、私は画像を投稿することはできませんが、それは次のことを示しています。

admin/{controller}/{action}/{id} as false

{controller}/{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

しかし、成功せずに。

これは簡単であるはずだと確信しており、私は多くのことを試してみました - それは非常にイライラします。どんな助けも本当に感謝しています。

ここでの私の最初の投稿 - こんにちは! :)

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top