Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av Dhananjay Kumar och Rick Anderson
Områden är en ASP.NET funktion som används för att organisera relaterade funktioner i en grupp som en separat:
- Namnområde för routning.
- Mappstruktur för vyer och Razor sidor.
Med hjälp av områden skapas en hierarki för routning genom att lägga till en annan routningsparameter, area, till controller och action eller en Razor sida page.
Områden ger ett sätt att partitionera en ASP.NET Core-webbapp i mindre funktionella grupper, var och en med sin egen uppsättning Razor sidor, kontrollanter, vyer och modeller. Ett område är i praktiken en struktur i en app. I ett ASP.NET Core-webbprojekt lagras logiska komponenter som Sidor, Modell, Styrenhet och Vy i olika mappar. ASP.NET Core-körningen använder namngivningskonventioner för att skapa relationen mellan dessa komponenter. För en stor app kan det vara fördelaktigt att partitionera appen i separata högnivåområden med funktioner. Till exempel en e-handelsapp med flera affärsenheter, till exempel kassa, fakturering och sökning. Var och en av dessa enheter har ett eget område som innehåller vyer, kontrollanter, Razor sidor och modeller.
Överväg att använda Områden i ett projekt när:
- Appen består av flera funktionella komponenter på hög nivå som kan separeras logiskt.
- Du vill dela upp app så att varje funktionsområde kan bearbetas separat.
Om du använder Razor Sidor kan du läsa Områden med Razor Sidor i det här dokumentet.
Områden för kontrollanter med vyer
En typisk ASP.NET Core-webbapp med hjälp av områden, kontrollanter och vyer innehåller följande:
- Kontrollanter med - [Area]attributet för att associera kontrollanten med området:- [Area("Products")] public class ManageController : Controller {
- Områdesvägen har lagts till i - Program.cs:- var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "MyArea", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
Mappstruktur för område
Överväg en app som har två logiska grupper, Produkter och tjänster. Med hjälp av områden skulle mappstrukturen likna följande:
- Projektnamn - Areas - Products - Controllers - HomeController.cs
- ManageController.cs
 
- Views - Home
- Index.cshtml
 
- Manage - Index.cshtml
- About.cshtml
 
 
- Home
 
- Controllers 
- Services - Controllers - HomeController.cs
 
- Views - Home
- Index.cshtml
 
 
- Home
 
- Controllers 
 
- Products 
 
- Areas 
Den föregående layouten är vanlig när du använder Områden, men endast visningsfilerna krävs för att använda den här mappstrukturen. Visa sökningar efter en matchande vyfil i området i följande ordning:
/Areas/<Area-Name>/Views/<Controller-Name>/<Action-Name>.cshtml
/Areas/<Area-Name>/Views/Shared/<Action-Name>.cshtml
/Views/Shared/<Action-Name>.cshtml
/Pages/Shared/<Action-Name>.cshtml
Associera kontrollanten med ett område
Områdeskontrollanter är avsedda med [Area] attributet:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Docs.Samples;
namespace MVCareas.Areas.Products.Controllers;
[Area("Products")]
public class ManageController : Controller
{
    public IActionResult Index()
    {
        ViewData["routeInfo"] = ControllerContext.MyDisplayRouteInfo();
        return View();
    }
    public IActionResult About()
    {
        ViewData["routeInfo"] = ControllerContext.MyDisplayRouteInfo();
        return View();
    }
}
Lägg till områdesväg
Områdesvägar använder vanligtvis konventionell routning i stället för attributroutning. Konventionell routning är orderberoende. I allmänhet bör vägar med områden placeras tidigare i routningstabellen eftersom de är mer specifika än vägar utan område.
              {area:...} kan användas som en token i routningsmallar om URL-utrymmet är enhetligt inom alla områden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
    name: "MyArea",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
I föregående kod exists tillämpar du en begränsning som vägen måste matcha ett område. Använda {area:...} med MapControllerRoute:
- Är den minst komplicerade mekanismen för att lägga till routning till områden.
- Matchar alla kontrollanter med attributet [Area("Area name")].
Följande kod använder MapAreaControllerRoute för att skapa två namngivna områdesvägar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapAreaControllerRoute(
    name: "MyAreaProducts",
    areaName: "Products",
    pattern: "Products/{controller=Home}/{action=Index}/{id?}");
app.MapAreaControllerRoute(
    name: "MyAreaServices",
    areaName: "Services",
    pattern: "Services/{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Mer information finns i Områdesroutning.
Länkgenerering med MVC-områdena
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området:
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-controller="Home" asp-action="About">
            Products/Home/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-controller="Home" asp-action="About">
            Services About
        </a>
    </li>
    <li>
        <a asp-area="" asp-controller="Home" asp-action="About">
            /Home/About
        </a>
    </li>
</ul>
<li>Html.ActionLink generated links</li>
<ul>
    <li>
        @Html.ActionLink("Product/Manage/About", "About", "Manage",
                                                new { area = "Products" })
    </li>
</ul>
<li>Url.Action generated links</li>
<ul>
    <li>
        <a href='@Url.Action("About", "Manage", new { area = "Products" })'>
            Products/Manage/About
        </a>
    </li>
</ul>
Exempelnedladdningen innehåller en partiell vy som innehåller:
- Föregående länkar.
- Länkar som liknar föregående, förutom att areainte har angetts.
Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område och kontrollant.
När området eller styrenheten inte har angetts beror routningen på omgivningsvärdena . De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar med den markering som inte anger området.
Mer information finns i Routning till kontrollantåtgärder.
Delad layout för områden med hjälp av filen _ViewStart.cshtml
Om du vill dela en gemensam layout för hela appen behåller du _ViewStart.cshtml i programrotmappen. Mer information finns i Layout i ASP.NET Core
Rotmapp för program
Rotmappen för programmet är mappen som innehåller Program.cs filen i en webbapp som skapats med ASP.NET Core-mallarna.
_ViewImports.cshtml
/Views/_ViewImports.cshtml, för MVC, och /Pages/_ViewImports.cshtml för Razor Sidor, importeras inte i områdesvyer. Använd någon av följande metoder för att tillämpa vy-importer till alla vyer:
- Lägg till _ViewImports.cshtml i programrotmappen. En _ViewImports.cshtml i programrotmappen gäller för alla vyer i appen.
- Kopiera filen _ViewImports.cshtml till lämplig vymapp under områden. Till exempel har en Razor Pages-app som skapats med enskilda konton en _ViewImports.cshtml-fil i följande mappar: - /Areas/Identity/Pages/_ViewImports.cshtml
- /Pages/_ViewImports.cshtml
 
Filen _ViewImports.cshtml innehåller vanligtvis tag helpers-importer , @usingoch @inject -instruktioner. Mer information finns i Importera delade direktiv.
Ändra standardområdesmappen där vyer lagras
Följande kod ändrar standardområdesmappen från "Areas" till "MyAreas":
using Microsoft.AspNetCore.Mvc.Razor;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<RazorViewEngineOptions>(options =>
{
    options.AreaViewLocationFormats.Clear();
    options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/{1}/{0}.cshtml");
    options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/Shared/{0}.cshtml");
    options.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
});
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
    name: "MyArea",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Områden med Razor sidor
Områden med Razor sidor kräver en Areas/<area name>/Pages mapp i appens rot. Följande mappstruktur används med exempelappen:
- Projektnamn - Areas - Products - Pages - _ViewImports
- About
- Index
 
 
- Pages 
- Services - Pages - Manage - About
- Index
 
 
- Manage 
 
- Pages 
 
- Products 
 
- Areas 
Länkgenerering med Razor sidor och områden
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området (till exempel asp-area="Products"):
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-page="/About">
            Products/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-page="/Manage/About">
            Services/Manage/About
        </a>
    </li>
    <li>
        <a asp-area="" asp-page="/About">
            /About
        </a>
    </li>
</ul>
<li>Url.Page generated links</li>
<ul>
    <li>
        <a href='@Url.Page("/Manage/About", new { area = "Services" })'>
            Services/Manage/About
        </a>
    </li>
    <li>
        <a href='@Url.Page("/About", new { area = "Products" })'>
            Products/About
        </a>
    </li>
</ul>
Exempelnedladdningen innehåller en partiell vy som innehåller föregående länkar och samma länkar utan att ange området. Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område.
När området inte har angetts beror routningen på omgivande värden. De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar. Tänk till exempel på länkarna som genereras från följande kod:
<li>
    <a asp-page="/Manage/About">
        Services/Manage/About
    </a>
</li>
<li>
    <a asp-page="/About">
        /About
    </a>
</li>
För föregående kod:
- Länken som genererades från <a asp-page="/Manage/About">är endast korrekt när den senaste begäran var för en sida iServicesområdet. Till exempel/Services/Manage/,/Services/Manage/Index, eller/Services/Manage/About.
- Länken som genererades från <a asp-page="/About">är endast korrekt när den senaste begäran var för en sida i/Home.
- Koden är från exempelnedladdningen.
Importera namnområde och tagghjälpmedel med _ViewImports fil
En _ViewImports.cshtml-fil kan läggas till i varje område Pages-mapp för att importera namnområdet och tagghjälparna till varje Razor sida i mappen.
Överväg området Tjänster i exempelkoden, som inte innehåller en _ViewImports.cshtml-fil . Följande markering visar sidan /Services/Manage/AboutRazor :
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RPareas.Areas.Services.Pages.Manage.AboutModel
@{
    ViewData["Title"] = "Srv Mng About";
}
<div>
  ViewData["routeInfo"]:  @ViewData["routeInfo"]
</div>
<a asp-area="Products" asp-page="/Index">
    Products/Index
</a>
I föregående markering:
- Det fullständigt kvalificerade klassnamnet måste användas för att ange modellen (@model RPareas.Areas.Services.Pages.Manage.AboutModel).
- 
              Tag Helpers aktiveras av @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
I exempelnedladdningen innehåller området Produkter följande _ViewImports.cshtml-fil :
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Följande markering visar sidan /Products/AboutRazor :
@page
@model AboutModel
@{
    ViewData["Title"] = "Prod About";
}
I föregående fil importeras namnområdet och @addTagHelper direktivet till filen av filen Areas/Products/Pages/_ViewImports.cshtml .
Mer information finns i Hantera tag Helper-omfång och importera delade direktiv.
Delad layout för Razor sidområden
Om du vill dela en gemensam layout för hela appen flyttar du _ViewStart.cshtml till programrotmappen.
Publiceringsområden
Alla *.cshtml-filer och filer i katalogen wwwroot publiceras till utdata när <Project Sdk="Microsoft.NET.Sdk.Web"> inkluderas i filen *.csproj.
Lägga till MVC-område med Visual Studio
I Solution Explorer högerklickar du på projektet och väljer LÄGG till > nytt autogenererat objekt och väljer sedan MVC-område.
Ytterligare resurser
- Visa eller ladda ned exempelkod (hur du laddar ned). Nedladdningsexemplet innehåller en grundläggande app för testområden.
- 
              MyDisplayRouteInfo och ToCtxString tillhandahålls av NuGet-paketet Rick.Docs.Samples.RouteInfo . Metoderna ControllerochRazor Pagevisar ruttinformation.
Områden är en ASP.NET funktion som används för att organisera relaterade funktioner i en grupp som en separat:
- Namnområde för routning.
- Mappstruktur för vyer och Razor sidor.
Med hjälp av områden skapas en hierarki för routning genom att lägga till en annan routningsparameter, area, till controller och action eller en Razor sida page.
Områden ger ett sätt att partitionera en ASP.NET Core-webbapp i mindre funktionella grupper, var och en med sin egen uppsättning Razor sidor, kontrollanter, vyer och modeller. Ett område är i praktiken en struktur i en app. I ett ASP.NET Core-webbprojekt lagras logiska komponenter som Sidor, Modell, Styrenhet och Vy i olika mappar. ASP.NET Core-körningen använder namngivningskonventioner för att skapa relationen mellan dessa komponenter. För en stor app kan det vara fördelaktigt att partitionera appen i separata högnivåområden med funktioner. Till exempel en e-handelsapp med flera affärsenheter, till exempel kassa, fakturering och sökning. Var och en av dessa enheter har ett eget område som innehåller vyer, kontrollanter, Razor sidor och modeller.
Överväg att använda Områden i ett projekt när:
- Appen består av flera funktionella komponenter på hög nivå som kan separeras logiskt.
- Du vill dela upp app så att varje funktionsområde kan bearbetas separat.
Visa eller ladda ned exempelkod (hur du laddar ned). Nedladdningsexemplet innehåller en grundläggande app för testområden.
Om du använder Razor Sidor kan du läsa Områden med Razor Sidor i det här dokumentet.
Områden för kontrollanter med vyer
En typisk ASP.NET Core-webbapp med hjälp av områden, kontrollanter och vyer innehåller följande:
- Kontrollanter med - [Area]attributet för att associera kontrollanten med området:- [Area("Products")] public class ManageController : Controller {
- Områdesvägen har lagts till för start: - app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "MyArea", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
Mappstruktur för område
Överväg en app som har två logiska grupper, Produkter och tjänster. Med hjälp av områden skulle mappstrukturen likna följande:
- Projektnamn - Areas - Products - Controllers - HomeController.cs
- ManageController.cs
 
- Views - Home
- Index.cshtml
 
- Manage - Index.cshtml
- About.cshtml
 
 
- Home
 
- Controllers 
- Services - Controllers - HomeController.cs
 
- Views - Home
- Index.cshtml
 
 
- Home
 
- Controllers 
 
- Products 
 
- Areas 
Den föregående layouten är vanlig när du använder Områden, men endast visningsfilerna krävs för att använda den här mappstrukturen. Visa sökningar efter en matchande vyfil i området i följande ordning:
/Areas/<Area-Name>/Views/<Controller-Name>/<Action-Name>.cshtml
/Areas/<Area-Name>/Views/Shared/<Action-Name>.cshtml
/Views/Shared/<Action-Name>.cshtml
/Pages/Shared/<Action-Name>.cshtml
Associera kontrollanten med ett område
Områdeskontrollanter är avsedda med attributet [Area] :
using Microsoft.AspNetCore.Mvc;
using Microsoft.Docs.Samples;
namespace MVCareas.Areas.Products.Controllers
{
    [Area("Products")]
    public class ManageController : Controller
    {
        public IActionResult Index()
        {
            ViewData["routeInfo"] = ControllerContext.MyDisplayRouteInfo();
            return View();
        }
        public IActionResult About()
        {
            ViewData["routeInfo"] = ControllerContext.MyDisplayRouteInfo();
            return View();
        }
    }
}
Lägg till områdesväg
Områdesvägar använder vanligtvis konventionell routning i stället för attributroutning. Konventionell routning är orderberoende. I allmänhet bör vägar med områden placeras tidigare i routningstabellen eftersom de är mer specifika än vägar utan område.
              {area:...} kan användas som en token i routningsmallar om URL-utrymmet är enhetligt inom alla områden:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "MyArea",
            pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
I föregående kod exists tillämpar du en begränsning som vägen måste matcha ett område. Använda {area:...} med MapControllerRoute:
- Är den minst komplicerade mekanismen för att lägga till routning till områden.
- Matchar alla kontrollanter med attributet [Area("Area name")].
Följande kod använder MapAreaControllerRoute för att skapa två namngivna områdesvägar:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapAreaControllerRoute(
            name: "MyAreaProducts",
            areaName: "Products",
            pattern: "Products/{controller=Home}/{action=Index}/{id?}");
        endpoints.MapAreaControllerRoute(
            name: "MyAreaServices",
            areaName: "Services",
            pattern: "Services/{controller=Home}/{action=Index}/{id?}");
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
Mer information finns i Områdesroutning.
Länkgenerering med MVC-områdena
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området:
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-controller="Home" asp-action="About">
            Products/Home/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-controller="Home" asp-action="About">
            Services About
        </a>
    </li>
    <li>
        <a asp-area="" asp-controller="Home" asp-action="About">
            /Home/About
        </a>
    </li>
</ul>
<li>Html.ActionLink generated links</li>
<ul>
    <li>
        @Html.ActionLink("Product/Manage/About", "About", "Manage",
                                                new { area = "Products" })
    </li>
</ul>
<li>Url.Action generated links</li>
<ul>
    <li>
        <a href='@Url.Action("About", "Manage", new { area = "Products" })'>
            Products/Manage/About
        </a>
    </li>
</ul>
Exempelnedladdningen innehåller en partiell vy som innehåller:
- Föregående länkar.
- Länkar som liknar föregående, förutom att areainte har angetts.
Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område och kontrollant.
När området eller styrenheten inte har angetts beror routningen på omgivningsvärdena . De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar med den markering som inte anger området.
Mer information finns i Routning till kontrollantåtgärder.
Delad layout för områden med hjälp av filen _ViewStart.cshtml
Om du vill dela en gemensam layout för hela appen behåller _ViewStart.cshtml du i rotmappen för programmet. Mer information finns i Layout i ASP.NET Core
Rotmapp för program
Rotmappen för programmet är mappen som innehåller Startup.cs i webbappen som skapats med ASP.NET Core-mallarna.
_ViewImports.cshtml
              /Views/_ViewImports.cshtml, för MVC och /Pages/_ViewImports.cshtml för Razor Sidor, importeras inte till vyer i områden. Använd någon av följande metoder för att tillämpa vy-importer till alla vyer:
- Lägg till _ViewImports.cshtmli programmets rotmapp. A_ViewImports.cshtmli programmets rotmapp gäller för alla vyer i appen.
- 
              _ViewImports.cshtmlKopiera filen till lämplig vymapp under områden.
Filen _ViewImports.cshtml innehåller vanligtvis Tag Helpers-importer , @usingoch @inject -instruktioner. Mer information finns i Importera delade direktiv.
Ändra standardområdesmappen där vyer lagras
Följande kod ändrar standardområdesmappen från "Areas" till "MyAreas":
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.AreaViewLocationFormats.Clear();
        options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/{1}/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/Shared/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
    });
    services.AddControllersWithViews();
}
Områden med Razor sidor
Områden med Razor sidor kräver en Areas/<area name>/Pages mapp i appens rot. Följande mappstruktur används med exempelappen:
- Projektnamn - Areas - Products - Pages - _ViewImports
- About
- Index
 
 
- Pages 
- Services - Pages - Manage - About
- Index
 
 
- Manage 
 
- Pages 
 
- Products 
 
- Areas 
Länkgenerering med Razor sidor och områden
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området (till exempel asp-area="Products"):
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-page="/About">
            Products/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-page="/Manage/About">
            Services/Manage/About
        </a>
    </li>
    <li>
        <a asp-area="" asp-page="/About">
            /About
        </a>
    </li>
</ul>
<li>Url.Page generated links</li>
<ul>
    <li>
        <a href='@Url.Page("/Manage/About", new { area = "Services" })'>
            Services/Manage/About
        </a>
    </li>
    <li>
        <a href='@Url.Page("/About", new { area = "Products" })'>
            Products/About
        </a>
    </li>
</ul>
Exempelnedladdningen innehåller en partiell vy som innehåller föregående länkar och samma länkar utan att ange området. Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område.
När området inte har angetts beror routningen på omgivande värden. De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar. Tänk till exempel på länkarna som genereras från följande kod:
<li>
    <a asp-page="/Manage/About">
        Services/Manage/About
    </a>
</li>
<li>
    <a asp-page="/About">
        /About
    </a>
</li>
För föregående kod:
- Länken som genererades från <a asp-page="/Manage/About">är endast korrekt när den senaste begäran var för en sida iServicesområdet. Till exempel/Services/Manage/,/Services/Manage/Index, eller/Services/Manage/About.
- Länken som genererades från <a asp-page="/About">är endast korrekt när den senaste begäran var för en sida i/Home.
- Koden är från exempelnedladdningen.
Importera namnområde och tagghjälpmedel med _ViewImports fil
En _ViewImports.cshtml fil kan läggas till i varje område Pages-mapp för att importera namnområdet och Tag Helpers till varje Razor sida i mappen.
Överväg området Tjänster i exempelkoden, som inte innehåller någon _ViewImports.cshtml fil. Följande markering visar sidan /Services/Manage/AboutRazor :
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RPareas.Areas.Services.Pages.Manage.AboutModel
@{
    ViewData["Title"] = "Srv Mng About";
}
<a asp-area="Products" asp-page="/Index">
    Products/Index
</a>
I föregående markering:
- Det fullständigt kvalificerade klassnamnet måste användas för att ange modellen (@model RPareas.Areas.Services.Pages.Manage.AboutModel).
- 
              Tag Helpers aktiveras av @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
I exempelnedladdningen innehåller området Produkter följande _ViewImports.cshtml fil:
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Följande markering visar sidan /Products/AboutRazor :
@page
@model AboutModel
@{
    ViewData["Title"] = "Prod About";
}
I föregående fil importeras namnområdet och @addTagHelper direktivet till filen av Areas/Products/Pages/_ViewImports.cshtml filen.
Mer information finns i Hantera tag Helper-omfång och importera delade direktiv.
Delad layout för Razor sidområden
Om du vill dela en gemensam layout för hela appen flyttar du _ViewStart.cshtml till rotmappen för programmet.
Publiceringsområden
Alla *.cshtml-filer och filer i katalogen wwwroot publiceras till utdata när <Project Sdk="Microsoft.NET.Sdk.Web"> inkluderas i filen *.csproj.
Lägga till MVC-område med Visual Studio
I Solution Explorer högerklickar du på projektet och väljer LÄGG till > nytt autogenererat objekt och väljer sedan MVC-område.
Områden är en ASP.NET funktion som används för att organisera relaterade funktioner i en grupp som ett separat namnområde (för routning) och mappstruktur (för vyer). Med hjälp av områden skapas en hierarki för routning genom att lägga till en annan routningsparameter, area, till controller och action eller en Razor sida page.
Områden ger ett sätt att partitionera en ASP.NET Core-webbapp i mindre funktionella grupper, var och en med sin egen uppsättning Razor sidor, kontrollanter, vyer och modeller. Ett område är i praktiken en struktur i en app. I ett ASP.NET Core-webbprojekt lagras logiska komponenter som Sidor, Modell, Styrenhet och Vy i olika mappar. ASP.NET Core-körningen använder namngivningskonventioner för att skapa relationen mellan dessa komponenter. För en stor app kan det vara fördelaktigt att partitionera appen i separata högnivåområden med funktioner. Till exempel en e-handelsapp med flera affärsenheter, till exempel kassa, fakturering och sökning. Var och en av dessa enheter har ett eget område som innehåller vyer, kontrollanter, Razor sidor och modeller.
Överväg att använda Områden i ett projekt när:
- Appen består av flera funktionella komponenter på hög nivå som kan separeras logiskt.
- Du vill dela upp app så att varje funktionsområde kan bearbetas separat.
Visa eller ladda ned exempelkod (hur du laddar ned). Nedladdningsexemplet innehåller en grundläggande app för testområden.
Om du använder Razor Sidor kan du läsa Områden med Razor Sidor i det här dokumentet.
Områden för kontrollanter med vyer
En typisk ASP.NET Core-webbapp med hjälp av områden, kontrollanter och vyer innehåller följande:
- Kontrollanter med - [Area]attributet för att associera kontrollanten med området:- [Area("Products")] public class ManageController : Controller {
- Områdesvägen har lagts till för start: - app.UseMvc(routes => { routes.MapRoute( name: "MyArea", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
Mappstruktur för område
Överväg en app som har två logiska grupper, Produkter och tjänster. Med hjälp av områden skulle mappstrukturen likna följande:
- Projektnamn - Areas - Products - Controllers - HomeController.cs
- ManageController.cs
 
- Views - Home
- Index.cshtml
 
- Manage - Index.cshtml
- About.cshtml
 
 
- Home
 
- Controllers 
- Services - Controllers - HomeController.cs
 
- Views - Home
- Index.cshtml
 
 
- Home
 
- Controllers 
 
- Products 
 
- Areas 
Den föregående layouten är vanlig när du använder Områden, men endast visningsfilerna krävs för att använda den här mappstrukturen. Visa sökningar efter en matchande vyfil i området i följande ordning:
/Areas/<Area-Name>/Views/<Controller-Name>/<Action-Name>.cshtml
/Areas/<Area-Name>/Views/Shared/<Action-Name>.cshtml
/Views/Shared/<Action-Name>.cshtml
/Pages/Shared/<Action-Name>.cshtml
Associera kontrollanten med ett område
Områdeskontrollanter är avsedda med attributet [Area] :
using Microsoft.AspNetCore.Mvc;
namespace MVCareas.Areas.Products.Controllers
{
    [Area("Products")]
    public class ManageController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult About()
        {
            return View();
        }
    }
}
Lägg till områdesväg
Områdesvägar använder vanligtvis konventionell routning i stället för attributroutning. Konventionell routning är orderberoende. I allmänhet bör vägar med områden placeras tidigare i routningstabellen eftersom de är mer specifika än vägar utan område.
              {area:...} kan användas som en token i routningsmallar om URL-utrymmet är enhetligt inom alla områden:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
          name: "MyArea",
          template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}/{id?}");
    });
}
I föregående kod exists tillämpar du en begränsning som vägen måste matcha ett område. Att använda {area:...} är den minst komplicerade mekanismen för att lägga till routning till områden.
Följande kod använder MapAreaRoute för att skapa två namngivna områdesvägar:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc(routes =>
    {
        routes.MapAreaRoute(
            name: "MyAreaProducts",
            areaName:"Products",
            template: "Products/{controller=Home}/{action=Index}/{id?}");
        routes.MapAreaRoute(
            name: "MyAreaServices",
            areaName: "Services",
            template: "Services/{controller=Home}/{action=Index}/{id?}");
        routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}/{id?}");
    });
}
Se MapAreaRoute när du använder  med ASP.NET Core 2.2.
Mer information finns i Områdesroutning.
Länkgenerering med MVC-områdena
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området:
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-controller="Home" asp-action="About">
            Products/Home/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-controller="Home" asp-action="About">
            Services About
        </a>
    </li>
    <li>
        <a asp-area="" asp-controller="Home" asp-action="About">
            /Home/About
        </a>
    </li>
</ul>
<li>Html.ActionLink generated links</li>
<ul>
    <li>
        @Html.ActionLink("Product/Manage/About", "About", "Manage", 
                                                new { area = "Products" })
    </li>
</ul>
<li>Url.Action generated links</li>
<ul>
    <li>
        <a href='@Url.Action("About", "Manage", new { area = "Products" })'>
            Products/Manage/About
        </a>
    </li>
</ul>
Länkarna som genereras med föregående kod är giltiga var som helst i appen.
Exempelnedladdningen innehåller en partiell vy som innehåller föregående länkar och samma länkar utan att ange området. Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område och kontrollant.
När området eller styrenheten inte har angetts beror routningen på omgivningsvärdena . De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar.
Mer information finns i Routning till kontrollantåtgärder.
Delad layout för områden med hjälp av filen _ViewStart.cshtml
Om du vill dela en gemensam layout för hela appen flyttar du _ViewStart.cshtml till rotmappen för programmet.
_ViewImports.cshtml
På sin standardplats gäller /Views/_ViewImports.cshtml inte för områden. Om du vill använda vanliga Tag Helpers, @using eller @inject i ditt område, ska du kontrollera att en korrekt _ViewImports.cshtml fil gäller för dina områdesvyer. Om du vill ha samma beteende i alla dina vyer, flytta /Views/_ViewImports.cshtml till programroten.
Ändra standardområdesmappen där vyer lagras
Följande kod ändrar standardområdesmappen från "Areas" till "MyAreas":
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.AreaViewLocationFormats.Clear();
        options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/{1}/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/MyAreas/{2}/Views/Shared/{0}.cshtml");
        options.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
    });
    services.AddMvc();
}
Områden med Razor sidor
Områden med Razor sidor kräver en Areas/<area name>/Pages mapp i appens rot. Följande mappstruktur används med exempelappen:
- Projektnamn - Areas - Products - Pages - _ViewImports
- About
- Index
 
 
- Pages 
- Services - Pages - Manage - About
- Index
 
 
- Manage 
 
- Pages 
 
- Products 
 
- Areas 
Länkgenerering med Razor sidor och områden
Följande kod från exempelnedladdningen visar länkgenerering med det angivna området (till exempel asp-area="Products"):
<li>Anchor Tag Helper links</li>
<ul>
    <li>
        <a asp-area="Products" asp-page="/About">
            Products/About
        </a>
    </li>
    <li>
        <a asp-area="Services" asp-page="/Manage/About">
            Services/Manage/About
        </a>
    </li>
    <li>
        <a asp-area="" asp-page="/About">
            /About
        </a>
    </li>
</ul>
<li>Url.Page generated links</li>
<ul>
    <li>
        <a href='@Url.Page("/Manage/About", new { area = "Services" })'>
            Services/Manage/About
        </a>
    </li>
    <li>
        <a href='@Url.Page("/About", new { area = "Products" })'>
            Products/About
        </a>
    </li>
</ul>
Länkarna som genereras med föregående kod är giltiga var som helst i appen.
Exempelnedladdningen innehåller en partiell vy som innehåller föregående länkar och samma länkar utan att ange området. Den partiella vyn refereras till i layoutfilen, så varje sida i appen visar de genererade länkarna. Länkarna som genereras utan att ange området är endast giltiga när de refereras från en sida i samma område.
När området inte har angetts beror routningen på omgivande värden. De nuvarande ruttvärdena för den aktuella begäran betraktas som omvarande värden för länkgenerering. I många fall för exempelappen genererar användning av omgivande värden felaktiga länkar. Tänk till exempel på länkarna som genereras från följande kod:
<li>
    <a asp-page="/Manage/About">
        Services/Manage/About
    </a>
</li>
<li>
    <a asp-page="/About">
        /About
    </a>
</li>
För föregående kod:
- Länken som genererades från <a asp-page="/Manage/About">är endast korrekt när den senaste begäran var för en sida iServicesområdet. Till exempel/Services/Manage/,/Services/Manage/Index, eller/Services/Manage/About.
- Länken som genererades från <a asp-page="/About">är endast korrekt när den senaste begäran var för en sida i/Home.
- Koden är från exempelnedladdningen.
Importera namnområde och tagghjälpmedel med _ViewImports fil
En _ViewImports.cshtml fil kan läggas till i varje område Pages-mapp för att importera namnområdet och Tag Helpers till varje Razor sida i mappen.
Överväg området Tjänster i exempelkoden, som inte innehåller någon _ViewImports.cshtml fil. Följande markering visar sidan /Services/Manage/AboutRazor :
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RPareas.Areas.Services.Pages.Manage.AboutModel
@{
    ViewData["Title"] = "Srv Mng About";
}
<h2>/Services/Manage/About</h2>
<a asp-area="Products" asp-page="/Index">
    Products/Index
</a>
I föregående markering:
- Det fullständigt kvalificerade domännamnet måste användas för att ange modellen (@model RPareas.Areas.Services.Pages.Manage.AboutModel).
- 
              Tag Helpers aktiveras av @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
I exempelnedladdningen innehåller området Produkter följande _ViewImports.cshtml fil:
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Följande markering visar sidan /Products/AboutRazor :
@page
@model AboutModel
@{
    ViewData["Title"] = "Prod About";
}
<h2>Products/About</h2>
<a asp-area="Services" asp-page="/Manage/About">
    Services/Manage/About
</a>
I föregående fil importeras namnområdet och @addTagHelper direktivet till filen av Areas/Products/Pages/_ViewImports.cshtml filen.
Mer information finns i Hantera tag Helper-omfång och importera delade direktiv.
Delad layout för Razor sidområden
Om du vill dela en gemensam layout för hela appen flyttar du _ViewStart.cshtml till rotmappen för programmet.
Publiceringsområden
Alla *.cshtml-filer och filer i katalogen wwwroot publiceras till utdata när <Project Sdk="Microsoft.NET.Sdk.Web"> inkluderas i filen *.csproj.
ASP.NET Core