2

StackOverflow でこの件名へのすべての可能なリンクを試しました。すべての提案はここで提供され、Rick Anderson によるビデオを見ましたが、肯定的な結果はありませんでした。「複数のタイプが見つかりました....」という恐ろしいメッセージがまだ表示されます。そして、私のプロジェクトはエリア現象を試すためのセットアップにすぎません。Razor ビューアーで Area を使用することはまったく可能ですか? それともASPXのみ??

これは私が持っているものです: Global.asax:

   routes.MapRoute( _
        "Default", _
        "{controller}/{action}/{id}", _
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication.Controllers"})

3 つの個別の AreaRegistration ファイル:

        Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
        context.MapRoute( _
            "Shopping_default", _
           "Shopping/{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
    End Sub

と:

        Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
        context.MapRoute( _
            "Blog_default", _
           "Blog/{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
    End Sub

と:

        Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
        context.MapRoute( _
            "Admin_default", _
           "Admin/{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional})
    End Sub

「.controller = "Home"」への追加の参照なしで3つのAreaRegistrationファイルがありましたが、すべて同じ結果が得られます。また、これら 3 つの宣言に名前空間の追加パラメーターを追加しようとしました。これを Global.asax に追加しようとしました:

        ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Admin.Controllers")
    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Blog.Controllers")
    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Shopping.Controllers")

    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Controllers")

しかし、それも肯定的な結果はありません。AreaRegistration クラスでもアプリケーション名なしで試しました。他にどのようなアクションを試すことができますか (そして成功した結果が得られますか?) プロジェクトの構造は簡単です。空のプロジェクトから始めて、すぐに HomeControllers と Index ビューの 3 つの領域を追加しました。名前空間への変更はなく、すべて可能な限りデフォルトのままです。MVC 4 テンプレートが使用されました。誰でも提案はありますか?

ピーター

4

2 に答える 2

2

問題は次のように解決されました。

  1. %AppName%.Areas.%AreaName%.Controllers を追加して、すべてのコントローラーに対して、テンプレートによって指定された既定の名前空間を変更します。上記の例では、管理領域の HomeController が Namespace に配置されました。

    Namespace MyApplication.Areas.Admin.Controllers
    

    これはたまたま、テンプレートによってレンダリングされた AreaRegistration クラスにあるものと同じ Namespace であり、"Controllers" サフィックスが追加されています。

  2. Global.asax のコードを次のように変更します。

    routes.MapRoute( _
        "Default", _
        "{controller}/{action}/{id}", _
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication"} _
    )
    

    したがって、ここに「MyApplication」名前空間が追加されます。これは、アプリケーション ルートの HomeController に名前空間が追加されていないという前提の下で正しく機能します (これがデフォルトです)。ルート HomeController に名前空間がある場合は、それを Global.asax ファイルで使用する必要があります。

この同じ問題を解決する方法が他にもあることがわかりましたが、これはテンプレートで生成されたコードと比較してコードの変更が最も少ない方法です。

于 2012-10-22T19:45:31.263 に答える
0

エリアを作成するときは、デフォルトの名前空間を変更しないでください。MyApplication.Areas.Admin.Controllersからに変更したようです( ととMyApplication.Admin.Controllers同じパターン)。デフォルトの規則を使用する場合、このエラーは発生しません。BlogShopping

于 2012-10-22T17:17:09.967 に答える