18

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

次のチュートリアルを試しました: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.netmvcで単一プロジェクトとして実装されたエリアと複数のプロジェクトとして実装されたエリアの長所と短所は何ですか

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" }
        );
    }
}
}

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

4

2 に答える 2

28

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

  1. Visual Studio拡張機能をインストールしますRazor Generator([ツール]-> [拡張機能と更新...])
  2. 空のテンプレートを使用して、新しいASP.NETMVC4アプリケーションを作成します。
  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

于 2012-10-16T10:03:22.323 に答える
0

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

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

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

于 2019-12-03T22:18:57.150 に答える