ASP.NET Core中国語ドキュメント第四章MVC(4.6)Areas(エリア)
5841 ワード
原文:Areas作者:Dhananjay KumarとRick Anderson翻訳:耿暁亮(Blue)校正:許登洋(Seay)
AreasはASP.NET MVCは、関連機能を個別のネーミングスペース(ルーティング)とフォルダ構造(ビュー)のセットにまとめる機能です.Areasを使用して階層のルーティングを作成するには、別のルーティングパラメータ
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」で、「Categories」に変更されます.
Viewsフォルダ構造は唯一重点的に考慮する必要があり、残りのフォルダはControllersやModelsのような内容は重要ではないことに注意してください.たとえば、ControllersフォルダやModelsフォルダはまったく必要ありません.これは、ControllersとModelsのコンテンツが1つにコンパイルされているためである.dllのコードはビューが要求されるまでViewの内容ではありません.
フォルダ階層が定義されると、MVCの各関連areaのcontrollerに伝える必要があります.コントローラ名は
新しく作成したareasでルーティングの定義を設定します.Routing to Controller Actionsでは、従来のルーティングとプロパティルーティングを使用するなど、ルーティング定義の作成方法について詳しく説明します.この例では、従来のルーティングを使用します.そうするにはStartupを開くだけですcsファイルは、下のハイライトされたルーティング定義を追加することで変更されます.
http://productsを参照すると、
は、1つのベースコントローラのareaのメソッドから、同じコントローラにリンクされた別のメソッドを生成する.現在の要求パスは、 は、1つのベースコントローラのareaのメソッドから、異なるコントローラにリンクされた別のメソッドを生成する.現在のリクエストパスは、 は、1つのベースコントローラのarea内のメソッドから、異なるコントローラおよび異なるareaにリンクされた別のメソッドを生成する.現在の要求パスは、 は、1つのベースコントローラのareaのメソッドから、1つのareaにリンクされていない異なるコントローラにリンクされた別のメソッドを生成する.HtmlHelper構文:
プロジェクトでareasフォルダのすべてのviewをパブリッシュします.jsonは、
ディレクトリに戻る
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を使用することを考慮してください.
Areasの作成と使用方法の例を見てみましょう.たとえば、1つのショップアプリケーションには、ProductsとServicesの2つの異なるグループのコントローラとビューがあります.次の典型的なフォルダ構造は、MVC Areaを使用して次のように見えます.
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.RazorViewEngineOptions
のAreaViewLocationFormats
方法によって変更することができる.たとえば、次のコードのフォルダ名は「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のHomeController
のIndex
メソッドが呼び出されます.リンクの生成
/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
値と呼ばれます./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」で明確に指定されていることに注意してください./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>
のように、環境値が使用されていないことに注意してください.@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は、
publishOptions
のinclude
ノードを含む."publishOptions": {
"include": [
"Areas/**/*.cshtml",
....
....
]
ディレクトリに戻る