別々のプロジェクトの領域を使用して、単純な概念実証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" }
);
}
}
}
助けてくれてありがとう!
RazorGenerator パッケージを使用して、Razorビューを別のアセンブリに埋め込むことができます。これを機能させるための手順は次のとおりです。
Razor Generator
Visual Studio拡張機能をインストールします([ツール]-> [拡張機能と更新...])AreasLibrary
というソリューションに新しいクラスライブラリプロジェクトを追加します(RazorビューでIntellisenseを取得するためにASP.NET MVCプロジェクトテンプレートを使用することもできます)RazorGenerator.Mvc
NuGetをAreasLibrary
プロジェクトにインストールします。AreasLibrary
プロジェクト(~/Areas/Admin/Controllers/HomeController.cs
)内にコントローラーを追加します。
public class HomeController: Controller
{
public ActionResult Index()
{
return View();
}
}
対応するビューを追加します(~/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>
ビューのプロパティで、Custom Tool
をRazorGenerator
に設定します。
クラスライブラリ内に~/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 = "" }
);
}
}
残っているのは、メインのMVCアプリケーションでクラスライブラリを参照することだけです。
参照: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html
私の場合、上記のダリンの提案のステップ#9を除くすべてを実行しました。
残っているのは、メインのMVCアプリケーションでクラスライブラリを参照することだけです。
ソリューションはコンパイルするために参照を必要としなかったので、私はそれを見落としました。ただし、実行時に、システムは要求を適切にルーティングできませんでした。他の誰かがこのマイナーな点を見落としている場合に備えて、ただ注意してください。