web-dev-qa-db-ja.com

別のプロジェクトのASP.NETMVC 4領域が機能しない(ビューが見つかりません)

別々のプロジェクトの領域を使用して、単純な概念実証ASP.NET MVC 4Webサイトを作成しようとしました。

次のチュートリアルを試しました: http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (アプリケーションが仮想ディレクトリで機能しません... IISを使用しています) 。仮想ディレクトリよりも良い方法があることを願っています。

次に、このチュートリアルを試しました: http://forums.asp.net/t/1483660.aspx/1 しかし、エリアプロジェクトの* .csprojに「AreasManifestDir」要素がありません(エラーが発生しました "ビュー 'インデックス'またはそのマスターが見つからなかったか、検索された場所をサポートするビューエンジンがありません ")

ASP.NET for MVC 4はまだサポートされていますか?この回答は将来削除できることがわかったので: asp.net mvcで単一プロジェクトとして実装されたエリアと複数のプロジェクトとして実装されたエリアの長所と短所は何ですか

MVC4のハウツーは見つかりませんでした。

ソリューションの構造は単純です。

Solution 'MvcAreasMultiProject'
    Areas [Directory]
        Admin [Project]
        Models
        Views
        Controllers
        Routes.cs [Examples]
    MvcAreasMultiProject [MainProject]
        - References Admin project
        M.V.C

管理プロジェクトのRoutes.cs:

namespace Admin
{
public class Routes : AreaRegistration
{
    public override string AreaName { get { return "Admin"; } }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_Default",
            "Admin/{action}/{id}",
            new { controller = "Admin", action = "Index", id = "" },
            new[] { "Admin.Controllers" }
        );
    }
}
}

助けてくれてありがとう!

18
Tomino

RazorGenerator パッケージを使用して、Razorビューを別のアセンブリに埋め込むことができます。これを機能させるための手順は次のとおりです。

  1. Razor Generator Visual Studio拡張機能をインストールします([ツール]-> [拡張機能と更新...])
  2. 空のテンプレートを使用して、新しいASP.NET MVC4アプリケーションを作成します。
  3. AreasLibraryというソリューションに新しいクラスライブラリプロジェクトを追加します(RazorビューでIntellisenseを取得するためにASP.NET MVCプロジェクトテンプレートを使用することもできます)
  4. RazorGenerator.MvcNuGetをAreasLibraryプロジェクトにインストールします。
  5. AreasLibraryプロジェクト(~/Areas/Admin/Controllers/HomeController.cs)内にコントローラーを追加します。

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
  6. 対応するビューを追加します(~/Areas/Admin/Views/Home/Index.cshtml):

    @* Generator: MvcView *@
    
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>View1</title>
    </head>
    <body>
        <div>
            Index view        
        </div>
    </body>
    </html>
    
  7. ビューのプロパティで、Custom ToolRazorGeneratorに設定します。

  8. クラスライブラリ内に~/Areas/AdminAreaRegistration.csを追加します。

    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName { get { return "Admin"; } }
    
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_Default",
                "Admin/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
            );
        }
    }
    
  9. 残っているのは、メインのMVCアプリケーションでクラスライブラリを参照することだけです。

参照: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html

27
Darin Dimitrov

私の場合、上記のダリンの提案のステップ#9を除くすべてを実行しました。

残っているのは、メインのMVCアプリケーションでクラスライブラリを参照することだけです。

ソリューションはコンパイルするために参照を必要としなかったので、私はそれを見落としました。ただし、実行時に、システムは要求を適切にルーティングできませんでした。他の誰かがこのマイナーな点を見落としている場合に備えて、ただ注意してください。

0
Andrew Dunaway