ASP.NET Core中国語ドキュメント第四章MVC(4.6)Areas(エリア)

5841 ワード

原文:Areas作者:Dhananjay KumarとRick Anderson翻訳:耿暁亮(Blue)校正:許登洋(Seay)
AreasはASP.NET MVCは、関連機能を個別のネーミングスペース(ルーティング)とフォルダ構造(ビュー)のセットにまとめる機能です.Areasを使用して階層のルーティングを作成するには、別のルーティングパラメータareaからControllerおよびactionを追加します.
Areasは大型ASPを提供している.NET Core MVC Webアプリケーションを小さい機能グループに分ける方法.Areaはアプリケーション内部の有効なMVC構造である.MVCプロジェクトでは、Model、Controller、Viewのような論理コンポーネントが異なるフォルダに配置され、MVCは名前付き規則でこれらのコンポーネント間の関係を作成します.大規模なアプリケーションでは、アプリケーションを独立した高度な機能のAreasに分割するのに役立ちます.例えば、会計、課金、検索などのマルチビジネスユニットの電子商取引アプリケーション.各ユニットには、ビュー、コントローラ、モデルなどの独自の論理コンポーネントがあります.この場合、Areasを使用してビジネスコンポーネントを同じプロジェクトで物理的に分割できます.
ASP.NET Core MVCプロジェクトでは、Areaは独自のコントローラ、view、modelの小さな機能ユニットとして定義されています.
以下の場合、MVCプロジェクトでAreasを使用することを考慮してください.
  • あなたのアプリケーションは論理的に複数の高度な機能コンポーネントの
  • に分割されるべきです.
  • MVCプロジェクトを分離し、各機能areaが独立して動作できるようにしたい
  • Areaプロパティ:
  • ASP.NET Core MVCアプリケーションは任意の数のarea
  • を持つことができる
  • 各areaには、独自のコントローラ、モデル、およびビュー
  • があります.
  • では、大規模なMVCプロジェクトを複数の高度なコンポーネントに編成することができ、
  • を独立して動作させることができる.
  • は、異なるareas
  • がある限り、同じ名前の複数のコントローラをサポートします.
    Areasの作成と使用方法の例を見てみましょう.たとえば、1つのショップアプリケーションには、ProductsとServicesの2つの異なるグループのコントローラとビューがあります.次の典型的なフォルダ構造は、MVC Areaを使用して次のように見えます.
  • Project name
  • Areas
  • Products
  • Controllers
  • HomeController.cs
  • ManageController.cs

  • Views
  • Home
  • Index.cshtml
  • Manage
  • Index.cshtml

  • Services
  • Controllers
  • HomeController.cs

  • Views
  • Home
  • Index.cshtml



  • MVCがAreaで1つのビューをレンダリングしようとすると、デフォルトでは次の場所を検索します.
    /Areas/<Area-Name>/Views/<Controller-Name>/<Action-Name>.cshtml
    /Areas/<Area-Name>/Views/Shared/<Action-Name>.cshtml
    /Views/Shared/<Action-Name>.cshtml

    これらのデフォルトの位置は、Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptionsAreaViewLocationFormats方法によって変更することができる.
    たとえば、次のコードのフォルダ名は「Areas」で、「Categories」に変更されます.
    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.AreaViewLocationFormats.Clear();
        options.AreaViewLocationFormats.Add("/Categories/{2}/Views/{1}/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/Categories/{2}/Views/Shared/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
    });

    Viewsフォルダ構造は唯一重点的に考慮する必要があり、残りのフォルダはControllersやModelsのような内容は重要ではないことに注意してください.たとえば、ControllersフォルダやModelsフォルダはまったく必要ありません.これは、ControllersとModelsのコンテンツが1つにコンパイルされているためである.dllのコードはビューが要求されるまでViewの内容ではありません.
    フォルダ階層が定義されると、MVCの各関連areaのcontrollerに伝える必要があります.コントローラ名は[Area]プロパティで修飾されます.
    ...
    namespace MyStore.Areas.Products.Controllers
    {
        [Area("Products")]
        public class HomeController : Controller
        {
            // GET: /Products/Home/Index
            public IActionResult Index()
            {
                return View();
            }
    
            // GET: /Products/Home/Create
            public IActionResult Create()
            {
                return View();
            }
        }
    }

    新しく作成したareasでルーティングの定義を設定します.Routing to Controller Actionsでは、従来のルーティングとプロパティルーティングを使用するなど、ルーティング定義の作成方法について詳しく説明します.この例では、従来のルーティングを使用します.そうするにはStartupを開くだけですcsファイルは、下のハイライトされたルーティング定義を追加することで変更されます.
    ...
    app.UseMvc(routes =>
    {
      routes.MapRoute(name: "areaRoute",
        template: "{area:exists}/{controller=Home}/{action=Index}");
    
      routes.MapRoute(
          name: "default",
          template: "{controller=Home}/{action=Index}");
    });

    http://productsを参照すると、Products areaのHomeControllerIndexメソッドが呼び出されます.

    リンクの生成

  • は、1つのベースコントローラのareaのメソッドから、同じコントローラにリンクされた別のメソッドを生成する.現在の要求パスは、/Products/Home/Create HtmlHelper構文:@Html.ActionLink("Go to Product's Home Page", "Index") TagHelper構文:<a asp-action="Index">Go to Product's Home Page</a>のように、現在の要求コンテキストで使用可能であるため、ここでは「area」および「controller」値を指定する必要はないことに注意してください.この値はambient値と呼ばれます.
  • は、1つのベースコントローラのareaのメソッドから、異なるコントローラにリンクされた別のメソッドを生成する.現在のリクエストパスは、/Products/Home/Create HtmlHelper構文:@Html.ActionLink("Go to Manage Products’ Home Page", "Index", "Manage") TagHelper構文:<a asp-controller="Manage" asp-action="Index">Go to Manage Products’ Home Page</a>である.ここで使用する「area」環境値は、上記の「controller」で明確に指定されていることに注意してください.
  • は、1つのベースコントローラのarea内のメソッドから、異なるコントローラおよび異なるareaにリンクされた別のメソッドを生成する.現在の要求パスは、/Products/Home/Create HtmlHelper構文:@Html.ActionLink("Go to Services’ Home Page", "Index", "Home", new { area = "Services" }) TagHelper構文:<a asp-area="Services" asp-controller="Home" asp-action="Index">Go to Services’ Home Page</a>のように、環境値が使用されていないことに注意してください.
  • は、1つのベースコントローラのareaのメソッドから、1つのareaにリンクされていない異なるコントローラにリンクされた別のメソッドを生成する.HtmlHelper構文:@Html.ActionLink("Go to Manage Products’ Home Page", "Index", "Home", new { area = "" }) TagHelper構文:<a asp-area="" asp-controller="Manage" asp-action="Index">Go to Manage Products’ Home Page</a>したがって、非areaにリンクされた基礎的なcontrollerメソッドが生成され、ここで「area」の環境値がクリアされる.

  • Areasのパブリッシュ


    プロジェクトでareasフォルダのすべてのviewをパブリッシュします.jsonは、publishOptionsincludeノードを含む.
    "publishOptions": {
    "include": [
      "Areas/**/*.cshtml",
      ....
      ....
    ]

    ディレクトリに戻る