Oblasti v ASP.NET Core
Od Dhananjay Kumarem a Rick Anderson
oblasti jsou funkce ASP.NET slouží k uspořádání souvisejících funkcí do skupiny jako samostatného:
- Obor názvů pro směrování
- Struktura složek pro zobrazení a Razor stránky
Použití oblastí vytvoří hierarchii pro účely směrování přidáním dalšího parametru trasy, area , do controller a action nebo do Razor stránky page .
oblasti představují způsob, jak rozdělit webovou aplikaci ASP.NET Core do menších funkčních skupin, z nichž každá má svou vlastní sadu Razor stránek, řadičů, zobrazení a modelů. Oblast je ve skutečnosti strukturou uvnitř aplikace. ve webovém projektu ASP.NET Core jsou logické komponenty, jako jsou stránky, Model, kontroler a zobrazení, uloženy v různých složkách. modul runtime ASP.NET Core používá konvence pojmenování k vytvoření vztahu mezi těmito součástmi. Pro velké aplikace může být výhodné rozdělit aplikaci na samostatné oblasti funkcí na úrovni vysoké úrovně. Například aplikace pro elektronické obchodování s více obchodními jednotkami, jako je například rezervace, fakturace a hledání. Každá z těchto jednotek má svou vlastní oblast, která obsahuje zobrazení, řadiče, Razor stránky a modely.
Zvažte použití oblastí v projektu, když:
- Aplikace se skládá z několika funkčních komponent na vysoké úrovni, které je možné logicky oddělit.
- Chcete rozdělit aplikaci tak, aby každá funkční oblast mohla pracovat nezávisle.
Zobrazit nebo stáhnout vzorový kód (Jak stáhnout). Ukázka stažení poskytuje základní aplikaci pro oblasti testování.
Pokud používáte Razor stránky, přečtěte si téma oblasti se Razor stránkami v tomto dokumentu.
Oblasti pro řadiče se zobrazeními
typická ASP.NET Core webové aplikace s využitím oblastí, řadičů a zobrazení obsahuje následující:
Řadiče s
[Area]atributem k přidružení kontroleru k oblasti:[Area("Products")] public class ManageController : Controller {Trasa oblasti přidaná ke spuštění:
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?}"); });
Struktura složky oblasti
Vezměte v úvahu aplikaci, která má dvě logické skupiny, produkty a služby. Pomocí oblastí by struktura složek vypadala podobně jako v následujícím příkladu:
- Název projektu
- Oblasti
- Produkty
- Kontrolery
- HomeController. cs
- ManageController. cs
- Zobrazení
- Home
- Soubor Index.cshtml
- Spravovat
- Soubor Index.cshtml
- O. cshtml
- Home
- Kontrolery
- Služby
- Kontrolery
- HomeController. cs
- Zobrazení
- Home
- Soubor Index.cshtml
- Home
- Kontrolery
- Produkty
- Oblasti
I když je předchozí rozložení typický při použití oblastí, k použití této struktury složek se vyžaduje jenom zobrazení souborů. Zobrazení vyhledávání pro soubor zobrazení se shodnými oblastmi v tomto pořadí:
/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
Přidružte kontroler k oblasti.
Řadiče oblastí jsou označeny atributem [ 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();
}
}
}
Přidat trasu oblasti
Trasy oblastí obvykle používají konvenční směrování namísto Směrování atributů. Konvenční směrování je závislé na pořadí. Obecně platí, že trasy s oblastmi by měly být umístěny dříve v tabulce směrování, protože jsou konkrétnější než trasy bez oblasti.
{area:...} dá se použít jako token v šablonách směrování, pokud je prostor adres URL stejnorodý napříč všemi oblastmi:
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?}");
});
}
V předchozím kódu exists použije omezení, které musí trasa odpovídat oblasti. Použití {area:...} s MapControllerRoute :
- Je nejjednodušším mechanismem přidávání směrování do oblastí.
- Vyhledá všechny řadiče s
[Area("Area name")]atributem.
Následující kód používá MapAreaControllerRoute k vytvoření dvou tras pojmenované oblasti:
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?}");
});
}
Další informace najdete v tématu Směrování oblastí.
Generování propojení s oblastmi MVC
Následující kód v ukázkovém souboru ke stažení zobrazuje generaci odkazů s určenou oblastí:
<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>
Ukázka ke stažení obsahuje částečné zobrazení , které obsahuje:
- Předchozí odkazy.
- Odkazy podobné předchozímu, s výjimkou
areanejsou zadány.
Na částečné zobrazení se odkazuje v souboru rozložení, takže každá stránka v aplikaci zobrazuje vygenerované odkazy. Odkazy vygenerované bez určení oblasti jsou platné pouze v případě, že jsou odkazovány ze stránky ve stejné oblasti a řadiči.
Pokud oblast nebo kontroler neurčíte, směrování závisí na okolních hodnotách. Aktuální hodnoty trasy aktuálního požadavku jsou považovány za okolní hodnoty pro generování odkazů. V mnoha případech pro ukázkovou aplikaci pomocí okolních hodnot generuje nesprávná propojení se značkou, která neurčuje oblast.
Další informace najdete v tématu směrování na akce kontroleru.
Sdílené rozložení pro oblasti používající _ViewStart soubor. cshtml
Chcete-li sdílet společné rozložení pro celou aplikaci, ponechte _ViewStart. cshtml v kořenové složce aplikace. Další informace najdete v tématu Rozložení v ASP.NET Core.
Kořenová složka aplikace
kořenová složka aplikace je složka obsahující Startup. cs ve webové aplikaci vytvořenou pomocí šablon ASP.NET Core.
_ViewImports. cshtml
/Views/_ViewImports. cshtml, pro MVC a /Pages/_ViewImports. cshtml pro Razor stránky, se neimportují do zobrazení v oblastech. Pomocí jednoho z následujících přístupů poskytněte importy zobrazení do všech zobrazení:
- Přidejte _ViewImports. cshtml do kořenové složky aplikace. _ViewImports. cshtml v kořenové složce aplikace se bude vztahovat na všechna zobrazení v aplikaci.
- Zkopírujte soubor _ViewImports. cshtml do příslušné složky zobrazení v oblasti.
Soubor _ViewImports. cshtml obvykle obsahuje pomocníky s příkazy Imports, @using a @inject . Další informace najdete v tématu Import sdílených direktiv.
Změna výchozí složky oblasti, kde jsou uložená zobrazení
Následující kód změní výchozí složku oblasti z "Areas" na "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();
}
Oblasti se Razor stránkami
Oblasti se Razor stránkami vyžadují Areas/<area name>/Pages složku v kořenovém adresáři aplikace. Pro ukázkovou aplikacise používá tato struktura složek:
- Název projektu
- Oblasti
- Produkty
- Stránky
- _ViewImports
- Informace
- Index
- Stránky
- Služby
- Stránky
- Spravovat
- Informace
- Index
- Spravovat
- Stránky
- Produkty
- Oblasti
Generování odkazů pomocí Razor stránek a oblastí
Následující kód v ukázkovém souboru ke stažení zobrazuje generaci odkazů se zadanou oblastí (například 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>
Ukázkový soubor ke stažení obsahuje částečné zobrazení obsahující předchozí odkazy a stejné odkazy bez určení oblasti. Na částečné zobrazení se odkazuje v souboru rozložení, takže každá stránka v aplikaci zobrazuje vygenerované odkazy. Odkazy vygenerované bez určení oblasti jsou platné pouze v případě, že jsou odkazovány ze stránky ve stejné oblasti.
Když není oblast zadaná, směrování závisí na okolních hodnotách. Aktuální hodnoty trasy aktuálního požadavku jsou považovány za okolní hodnoty pro generování odkazů. V mnoha případech ukázkové aplikace pomocí okolních hodnot generuje nesprávné odkazy. Zvažte například odkazy vygenerované z následujícího kódu:
<li>
<a asp-page="/Manage/About">
Services/Manage/About
</a>
</li>
<li>
<a asp-page="/About">
/About
</a>
</li>
Pro předchozí kód:
- Odkaz vygenerovaný z
<a asp-page="/Manage/About">je správný pouze v případě, že byl poslední požadavek na stránku vServicesoblasti. Například,,/Services/Manage//Services/Manage/Indexnebo/Services/Manage/About. - Odkaz vygenerovaný z
<a asp-page="/About">je správný pouze v případě, že byl poslední požadavek na stránku v/Home. - Kód pochází z ukázkového stažení.
Importovat obory názvů a pomocníka značek s _ViewImportsm souborem
Soubor _ViewImports. cshtml lze přidat do každé složky oblasti stránky a importovat tak obor názvů a značku pomocníka značek na každou Razor stránku ve složce.
Vezměte v úvahu oblast služeb ukázkového kódu, která neobsahuje soubor _ViewImports. cshtml . Následující kód ukazuje stránku /Services/Manage/about Razor :
@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>
V předchozím kódu:
- K určení modelu () je nutné použít plně kvalifikovaný název třídy
@model RPareas.Areas.Services.Pages.Manage.AboutModel. - Pomocník značek je povolený nástrojem
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
V ukázkovém stažení oblast produkty obsahuje následující _ViewImports soubor. cshtml :
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Následující kód ukazuje stránku /Products/about Razor :
@page
@model AboutModel
@{
ViewData["Title"] = "Prod About";
}
V předchozím souboru je obor názvů a @addTagHelper direktiva importován do souboru pomocí souboru areas/Products/Pages/_ViewImports. cshtml .
Další informace najdete v tématech Správa oboru pomocníka značek a Import sdílených direktiv.
Sdílené rozložení pro Razor oblasti stránek
Chcete-li sdílet společné rozložení pro celou aplikaci, přesuňte _ViewStart. cshtml do kořenové složky aplikace.
Oblasti publikování
Všechny soubory *. cshtml a soubory v adresáři wwwroot jsou publikovány ve výstupu, pokud <Project Sdk="Microsoft.NET.Sdk.Web"> je součástí souboru *. csproj.
Přidat oblast MVC s Visual Studio
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt a vyberte přidat > nová vygenerovaná položka a pak vyberte oblast MVC.
oblasti jsou funkce ASP.NET slouží k uspořádání souvisejících funkcí do skupiny jako samostatného oboru názvů (pro směrování) a struktury složek (pro zobrazení). Použití oblastí vytvoří hierarchii pro účely směrování přidáním dalšího parametru trasy, area , do controller a action nebo do Razor stránky page .
oblasti představují způsob, jak rozdělit webovou aplikaci ASP.NET Core do menších funkčních skupin, z nichž každá má svou vlastní sadu Razor stránek, řadičů, zobrazení a modelů. Oblast je ve skutečnosti strukturou uvnitř aplikace. ve webovém projektu ASP.NET Core jsou logické komponenty, jako jsou stránky, Model, kontroler a zobrazení, uloženy v různých složkách. modul runtime ASP.NET Core používá konvence pojmenování k vytvoření vztahu mezi těmito součástmi. Pro velké aplikace může být výhodné rozdělit aplikaci na samostatné oblasti funkcí na úrovni vysoké úrovně. Například aplikace pro elektronické obchodování s více obchodními jednotkami, jako je například rezervace, fakturace a hledání. Každá z těchto jednotek má svou vlastní oblast, která obsahuje zobrazení, řadiče, Razor stránky a modely.
Zvažte použití oblastí v projektu, když:
- Aplikace se skládá z několika funkčních komponent na vysoké úrovni, které je možné logicky oddělit.
- Chcete rozdělit aplikaci tak, aby každá funkční oblast mohla pracovat nezávisle.
Zobrazit nebo stáhnout vzorový kód (Jak stáhnout). Ukázka stažení poskytuje základní aplikaci pro oblasti testování.
Pokud používáte Razor stránky, přečtěte si téma oblasti se Razor stránkami v tomto dokumentu.
Oblasti pro řadiče se zobrazeními
typická ASP.NET Core webové aplikace s využitím oblastí, řadičů a zobrazení obsahuje následující:
Řadiče s
[Area]atributem k přidružení kontroleru k oblasti:[Area("Products")] public class ManageController : Controller {Trasa oblasti přidaná ke spuštění:
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?}"); });
Struktura složky oblasti
Vezměte v úvahu aplikaci, která má dvě logické skupiny, produkty a služby. Pomocí oblastí by struktura složek vypadala podobně jako v následujícím příkladu:
- Název projektu
- Oblasti
- Produkty
- Kontrolery
- HomeController. cs
- ManageController. cs
- Zobrazení
- Home
- Soubor Index.cshtml
- Spravovat
- Soubor Index.cshtml
- O. cshtml
- Home
- Kontrolery
- Služby
- Kontrolery
- HomeController. cs
- Zobrazení
- Home
- Soubor Index.cshtml
- Home
- Kontrolery
- Produkty
- Oblasti
I když je předchozí rozložení typický při použití oblastí, k použití této struktury složek se vyžaduje jenom zobrazení souborů. Zobrazení vyhledávání pro soubor zobrazení se shodnými oblastmi v tomto pořadí:
/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
Přidružte kontroler k oblasti.
Řadiče oblastí jsou označeny atributem [ 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();
}
}
}
Přidat trasu oblasti
Trasy oblastí obvykle používají konvenční směrování namísto směrování atributů. Konvenční směrování je závislé na pořadí. Obecně platí, že trasy s oblastmi by měly být umístěny dříve v tabulce směrování, protože jsou konkrétnější než trasy bez oblasti.
{area:...} dá se použít jako token v šablonách směrování, pokud je prostor adres URL stejnorodý napříč všemi oblastmi:
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?}");
});
}
V předchozím kódu exists použije omezení, které musí trasa odpovídat oblasti. Použití je nejjednodušším {area:...} mechanismem přidávání směrování do oblastí.
Následující kód používá MapAreaRoute k vytvoření dvou tras pojmenované oblasti:
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?}");
});
}
pokud používáte MapAreaRoute s ASP.NET Core 2,2, přečtěte si tento GitHub problém.
Další informace najdete v tématu Směrování oblastí.
Generování propojení s oblastmi MVC
Následující kód v ukázkovém souboru ke stažení zobrazuje generaci odkazů s určenou oblastí:
<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>
Odkazy vygenerované v předchozím kódu jsou platné kdekoli v aplikaci.
Ukázkový soubor ke stažení obsahuje částečné zobrazení obsahující předchozí odkazy a stejné odkazy bez určení oblasti. Na částečné zobrazení se odkazuje v souboru rozložení, takže každá stránka v aplikaci zobrazuje vygenerované odkazy. Odkazy vygenerované bez určení oblasti jsou platné pouze v případě, že jsou odkazovány ze stránky ve stejné oblasti a řadiči.
Pokud oblast nebo kontroler neurčíte, směrování závisí na okolních hodnotách. Aktuální hodnoty trasy aktuálního požadavku jsou považovány za okolní hodnoty pro generování odkazů. V mnoha případech ukázkové aplikace pomocí okolních hodnot generuje nesprávné odkazy.
Další informace najdete v tématu směrování na akce kontroleru.
Sdílené rozložení pro oblasti používající _ViewStart soubor. cshtml
Chcete-li sdílet společné rozložení pro celou aplikaci, přesuňte _ViewStart. cshtml do kořenové složky aplikace.
_ViewImports. cshtml
Ve svém standardním umístění /Views/_ViewImports. cshtml se nevztahuje na oblasti. Chcete-li použít běžné pomocníky značek, @using nebo @inject ve vaší oblasti, zajistěte, aby se v zobrazeních oblastípoužíval vhodný _ViewImports. cshtml . Pokud chcete stejné chování ve všech zobrazeních, přesuňte /Views/_ViewImports.cshtml do kořenového adresáře aplikace.
Změna výchozí složky oblasti, ve které jsou uložená zobrazení
Následující kód změní výchozí složku oblasti z "Areas" na "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();
}
Oblasti se Razor stránkami
Oblasti Razor se stránkami Areas/<area name>/Pages vyžadují složku v kořenovém adresáři aplikace. S ukázkovou aplikací se používá následující struktura složek:
- Název projektu
- Oblasti
- Produkty
- Stránky
- _ViewImports
- Informace
- Index
- Stránky
- Služby
- Stránky
- Spravovat
- Informace
- Index
- Spravovat
- Stránky
- Produkty
- Oblasti
Generování propojení se stránkami a Razor oblastmi
Následující kód z ukázkového stažení ukazuje generování odkazu se zadanou oblastí (například 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>
Odkazy vygenerované pomocí předchozího kódu jsou platné kdekoli v aplikaci.
Ukázka stažení zahrnuje částečné zobrazení, které obsahuje předchozí odkazy, a stejné odkazy bez zadání oblasti. Částečné zobrazení je odkazováno v souboru rozložení, takže každá stránka v aplikaci zobrazí vygenerované odkazy. Odkazy vygenerované bez zadání oblasti jsou platné jenom v případě, že odkazujete ze stránky ve stejné oblasti.
Pokud oblast není zadaná, směrování závisí na okolních hodnotách. Aktuální hodnoty tras aktuálního požadavku se považují za ambientní hodnoty pro generování propojení. V mnoha případech pro ukázkovou aplikaci vygeneruje použití okolních hodnot nesprávné odkazy. Představte si například odkazy vygenerované z následujícího kódu:
<li>
<a asp-page="/Manage/About">
Services/Manage/About
</a>
</li>
<li>
<a asp-page="/About">
/About
</a>
</li>
Pro předchozí kód:
- Odkaz vygenerovaný z je správný jenom v případě, že poslední požadavek
<a asp-page="/Manage/About">byl na stránku vServicesoblasti. Například/Services/Manage/,/Services/Manage/Indexnebo/Services/Manage/About. - Odkaz vygenerovaný z
<a asp-page="/About">je správný jenom v případě, že poslední požadavek byl na stránku v/Home. - Kód pochází z ukázkového souboru ke stažení.
Import oborů názvů a pomocných _ViewImports značek
Do každé složky Pages je možné přidat soubor _ViewImports.cshtml, který naimportuje obor názvů a pomocné rutina značek na Razor každou stránku ve složce.
Vezměte v úvahu oblast Services ukázkového kódu, která neobsahuje soubor _ViewImports.cshtml. Následující kód ukazuje stránku /Services/Manage/About: Razor
@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>
V předchozím kódu:
- K určení modelu ( ) se musí použít plně kvalifikovaný název
@model RPareas.Areas.Services.Pages.Manage.AboutModeldomény. - Pomocná zařízení značek jsou povolená
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
V ukázkovém souboru ke stažení obsahuje oblast Products následující soubor _ViewImports.cshtml:
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Následující kód ukazuje stránku /Products/About: Razor
@page
@model AboutModel
@{
ViewData["Title"] = "Prod About";
}
<h2>Products/About</h2>
<a asp-area="Services" asp-page="/Manage/About">
Services/Manage/About
</a>
V předchozím souboru se obor názvů a direktiva importují do souboru pomocí souboru @addTagHelper Areas/Products/Pages/_ViewImports.cshtml.
Další informace najdete v tématu Správa oboru pomocných značek a Import sdílených direktiv.
Sdílené rozložení pro Razor oblasti stránek
Pokud chcete sdílet společné rozložení pro celou aplikaci, přesuňte soubor _ViewStart.cshtml do kořenové složky aplikace.
Publikování oblastí
Všechny soubory *.cshtml a soubory v adresáři wwwroot jsou publikovány do výstupu, pokud je součástí <Project Sdk="Microsoft.NET.Sdk.Web"> souboru *.csproj.