ASP.NET Core bölgeler
Dhananjay Rohan ve Rick Anderson
bölgeler, ilgili işlevselliği ayrı olarak bir grup içinde düzenlemek için kullanılan bir ASP.NET özelliğidir:
- Yönlendirme için ad alanı.
- Görünümler ve sayfalar için klasör yapısı Razor .
Alanların kullanılması, başka bir rota parametresi, area , controller ve action veya bir Razor sayfa ekleyerek yönlendirmenin amacı için bir hiyerarşi oluşturur page .
alanları, her biri kendi Razor sayfa, denetleyiciler, görünümler ve modeller kümesine sahip bir ASP.NET Core Web uygulamasını daha küçük işlevsel gruplar halinde bölümlemek için bir yol sağlar. Bir alan, bir uygulamanın içindeki yapısı etkin bir şekilde. bir ASP.NET Core web projesinde, sayfalar, Model, denetleyici ve görünüm gibi mantıksal bileşenler farklı klasörlerde tutulur. ASP.NET Core çalışma zamanı, bu bileşenler arasındaki ilişkiyi oluşturmak için adlandırma kurallarını kullanır. Büyük bir uygulama için, uygulamayı işlevlerin ayrı üst düzey alanlarında bölümlemek avantajlı olabilir. Örneğin, kullanıma alma, faturalandırma ve arama gibi birden çok iş birimi içeren bir e-ticaret uygulaması. Bu birimlerin her birinin görünümleri, denetleyicileri, sayfaları ve modelleri içermesi için kendi alanı vardır Razor .
Şu durumlarda bir projedeki alanı kullanmayı göz önünde bulundurun:
- Uygulama, mantıksal olarak ayrılabilen birden çok üst düzey işlevsel bileşenden oluşur.
- Her işlevsel alanın bağımsız olarak çalışabilmesi için uygulamayı bölümlemek istiyorsunuz.
Örnek kodu görüntüleyin veya indirin (nasıl indirilir). İndirme örneği, test bölgeleri için temel bir uygulama sağlar.
RazorSayfalar kullanıyorsanız, bkz. bu belgede Razor sayfaları bulunan bölgeler .
Görünümlere sahip denetleyiciler için bölgeler
alanları, denetleyicileri ve görünümleri kullanan tipik bir ASP.NET Core web uygulaması şunları içerir:
Bir alan klasörü yapısı.
Denetleyiciyi içeren ve
[Area]denetleyiciyi alanla ilişkilendiren denetleyiciler:[Area("Products")] public class ManageController : Controller {Başlangıç alanına eklenen alan yolu:
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?}"); });
Alan klasörü yapısı
İki mantıksal grup, ürün ve hizmet içeren bir uygulamayı düşünün. Alan kullanarak, klasör yapısı aşağıdakine benzer olacaktır:
- Proje adı
- Alanlar
- Ürünler
- Denetleyiciler
- HomeController. cs
- ManageController. cs
- Görünümler
- Home
- Index.cshtml
- Yönetme
- Index.cshtml
- . Cshtml hakkında
- Home
- Denetleyiciler
- Hizmetler
- Denetleyiciler
- HomeController. cs
- Görünümler
- Home
- Index.cshtml
- Home
- Denetleyiciler
- Ürünler
- Alanlar
Yukarıdaki düzen, alan kullanılırken tipik olsa da, bu klasör yapısını kullanmak için yalnızca görünüm dosyaları gereklidir. Eşleşen bir alan görünümü dosyası için bulma aramalarını aşağıdaki sırayla görüntüleyin:
/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
Denetleyiciyi bir alanla ilişkilendir
Alan denetleyicileri, [ alan ] özniteliğiyle belirlenir:
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();
}
}
}
Alan yolu Ekle
Alan rotaları genellikle öznitelik yönlendirmeyerine geleneksel yönlendirmeyi kullanır. Geleneksel yönlendirme sıra bağımlıdır. Genel olarak, alanlar içeren rotalar, alan olmayan rotalardan daha belirgin olduklarından daha önce rota tablosuna yerleştirilmelidir.
{area:...} , URL alanı tüm alanlarda Tekdüzen ise yol şablonlarında bir belirteç olarak kullanılabilir:
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?}");
});
}
Önceki kodda, exists yolun bir alanla eşleşmesi gereken bir kısıtlama uygular. {area:...}İle kullanma MapControllerRoute :
- Alanlara yönlendirme eklemek için en az karmaşık mekanizmadır.
- Özniteliği ile tüm denetleyicilerle eşleşir
[Area("Area name")].
Aşağıdaki kod, MapAreaControllerRoute iki adlandırılmış alan yolları oluşturmak için kullanır:
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?}");
});
}
Daha fazla bilgi için bkz. alan yönlendirme.
MVC alanlarıyla bağlantı oluşturma
Örnek indirmenin aşağıdaki kodu, belirtilen alanla birlikte bağlantı oluşturmayı gösterir:
<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>
Örnek indirme, aşağıdakileri içeren kısmi bir görünüm içerir:
- Önceki bağlantılar.
- Önceki bir ile benzer bağlantılar
areabelirtilmedi.
Kısmi görünüme, Düzen dosyasındabaşvurulur, bu nedenle uygulamadaki her sayfa oluşturulan bağlantıları görüntüler. Alanı belirtmeden oluşturulan bağlantılar yalnızca aynı alan ve denetleyicideki bir sayfadan başvuruluyorsa geçerlidir.
Alan veya denetleyici belirtilmediğinde, yönlendirme ortam değerlerine göre değişir. Geçerli isteğin geçerli yol değerleri, bağlantı oluşturma için çevresel değerler olarak kabul edilir. Örnek uygulama için birçok durumda, ortam değerlerini kullanmak, alanı belirtmeyen biçimlendirme ile yanlış bağlantılar oluşturur.
Daha fazla bilgi için bkz. Denetleyici eylemlerine yönlendirme.
_ViewStart. cshtml dosyasını kullanan alanların paylaşılan düzeni
Uygulamanın tamamı için ortak bir düzen paylaşmak üzere, uygulama kök klasöründe _ViewStart. cshtml 'yi saklayın. Daha fazla bilgi için bkz. ASP.NET Core'de düzen.
Uygulama kök klasörü
uygulama kök klasörü, ASP.NET Core şablonlarıyla oluşturulan web uygulamasındaki Startup. cs ' nin bulunduğu klasördür.
_ViewImports. cshtml
/Views/_ViewImports. cshtml, MVC için /pages/_ViewImports. cshtml for Pages, Razor alanlardaki görünümlere aktarılmaz. Tüm görünümlere görünüm içeri aktarmaları sağlamak için aşağıdaki yaklaşımlardan birini kullanın:
- Uygulama kök klasörüne _ViewImports. cshtml ekleyin. Uygulama kök klasöründeki bir _ViewImports. cshtml uygulamadaki tüm görünümlere uygulanır.
- _ViewImports. cshtml dosyasını, alanlarda uygun görünüm klasörüne kopyalayın.
_ViewImports. cshtml dosyası genellikle Etiket Yardımcıları içeri aktarmaları, @using , ve @inject deyimlerini içerir. Daha fazla bilgi için bkz. paylaşılan yönergeleri Içeri aktarma.
Görünümlerin depolandığı varsayılan alan klasörünü değiştirme
Aşağıdaki kod varsayılan alan klasörünü ' den ' a "Areas" değiştirir "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();
}
Sayfaları olan bölgeler Razor
Sayfaları olan alanlarda, Razor Areas/<area name>/Pages uygulamanın kökünde bir klasör gerekir. Aşağıdaki klasör yapısı örnek uygulamaylabirlikte kullanılır:
- Proje adı
- Alanlar
- Ürünler
- Sayfalar
- _ViewImports
- Hakkında
- Dizin oluşturma
- Sayfalar
- Hizmetler
- Sayfalar
- Yönetme
- Hakkında
- Dizin oluşturma
- Yönetme
- Sayfalar
- Ürünler
- Alanlar
RazorSayfalar ve alanlarla bağlantı oluşturma
Örnek indirmenin aşağıdaki kodu, belirtilen alanla birlikte bağlantı oluşturmayı gösterir (örneğin, 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>
Örnek indirme, önceki bağlantıları içeren kısmi bir görünüm ve alanı belirtmeksizin aynı bağlantıları içerir. Kısmi görünüme, Düzen dosyasındabaşvurulur, bu nedenle uygulamadaki her sayfa oluşturulan bağlantıları görüntüler. Alanı belirtmeden oluşturulan bağlantılar yalnızca aynı alandaki bir sayfadan başvuruluyorsa geçerlidir.
Alan belirtilmediğinde, yönlendirme ortam değerlerine göre değişir. Geçerli isteğin geçerli yol değerleri, bağlantı oluşturma için çevresel değerler olarak kabul edilir. Örnek uygulama için birçok durumda, ortam değerlerini kullanmak yanlış bağlantılar oluşturur. Örneğin, aşağıdaki koddan oluşturulan bağlantıları göz önünde bulundurun:
<li>
<a asp-page="/Manage/About">
Services/Manage/About
</a>
</li>
<li>
<a asp-page="/About">
/About
</a>
</li>
Önceki kod için:
- Öğesinden oluşturulan bağlantı,
<a asp-page="/Manage/About">yalnızca son istek alanındaki bir sayfa için olduğunda doğrudurServices. Örneğin,,/Services/Manage//Services/Manage/Indexveya/Services/Manage/About. - Öğesinden oluşturulan bağlantı
<a asp-page="/About">yalnızca son istek içindeki bir sayfa için olduğunda doğrudur/Home. - Kod, örnek indirden.
Ad alanı ve etiket yardımcıları _ViewImports dosya ile içeri aktarma
Bir _ViewImports. cshtml dosyası her bir alan sayfaları klasörüne eklenerek, ad alanı ve etiket yardımcıları, klasördeki her bir Razor sayfaya alınır.
Örnek kodun bir _ViewImports. cshtml dosyası içermeyen Hizmetler alanını göz önünde bulundurun. Aşağıdaki biçimlendirme /Services/Manage/about Razor sayfasını göstermektedir:
@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>
Önceki biçimlendirmede:
- Modeli () belirtmek için tam sınıf adının kullanılması gerekir
@model RPareas.Areas.Services.Pages.Manage.AboutModel. - Etiket Yardımcıları tarafından etkinleştirilir
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Örnek indirme sırasında, ürünler alanı aşağıdaki _ViewImports. cshtml dosyasını içerir:
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Aşağıdaki biçimlendirme /Products/about Razor sayfasını göstermektedir:
@page
@model AboutModel
@{
ViewData["Title"] = "Prod About";
}
Önceki dosyada, ad alanı ve yönerge, @addTagHelper alan/ürün/sayfa/_ViewImports. cshtml dosyası tarafından dosyaya aktarılır.
Daha fazla bilgi için bkz. etiket Yardımcısı kapsamını yönetme ve paylaşılan yönergeleri içeri aktarma.
Sayfalar için paylaşılan Düzen Razor alanı
Uygulamanın tamamında ortak bir düzen paylaşmak için _ViewStart. cshtml 'yi uygulama kök klasörüne taşıyın.
Yayımlama alanı
Wwwroot dizinindeki tüm *. cshtml dosyaları ve dosyaları, <Project Sdk="Microsoft.NET.Sdk.Web"> *. csproj dosyasına dahil edildiğinde çıkışa yayımlanır.
Visual Studio MVC alanı ekleme
Çözüm Gezgini ' de projeye sağ tıklayın ve > yeni Iskele öğe Ekle' yi seçin ve ardından MVC alanı' nı seçin.
bölgeler, ilgili işlevselliği ayrı bir ad alanı (yönlendirme için) ve klasör yapısı (görünümler için) olarak bir grupla düzenlemek için kullanılan bir ASP.NET özelliğidir. Alanların kullanılması, başka bir rota parametresi, area , controller ve action veya bir Razor sayfa ekleyerek yönlendirmenin amacı için bir hiyerarşi oluşturur page .
alanları, her biri kendi Razor sayfa, denetleyiciler, görünümler ve modeller kümesine sahip bir ASP.NET Core Web uygulamasını daha küçük işlevsel gruplar halinde bölümlemek için bir yol sağlar. Bir alan, bir uygulamanın içindeki yapısı etkin bir şekilde. bir ASP.NET Core web projesinde, sayfalar, Model, denetleyici ve görünüm gibi mantıksal bileşenler farklı klasörlerde tutulur. ASP.NET Core çalışma zamanı, bu bileşenler arasındaki ilişkiyi oluşturmak için adlandırma kurallarını kullanır. Büyük bir uygulama için, uygulamayı işlevlerin ayrı üst düzey alanlarında bölümlemek avantajlı olabilir. Örneğin, kullanıma alma, faturalandırma ve arama gibi birden çok iş birimi içeren bir e-ticaret uygulaması. Bu birimlerin her birinin görünümleri, denetleyicileri, sayfaları ve modelleri içermesi için kendi alanı vardır Razor .
Şu durumlarda bir projedeki alanı kullanmayı göz önünde bulundurun:
- Uygulama, mantıksal olarak ayrılabilen birden çok üst düzey işlevsel bileşenden oluşur.
- Her işlevsel alanın bağımsız olarak çalışabilmesi için uygulamayı bölümlemek istiyorsunuz.
Örnek kodu görüntüleyin veya indirin (nasıl indirilir). İndirme örneği, test bölgeleri için temel bir uygulama sağlar.
RazorSayfalar kullanıyorsanız, bkz. bu belgede Razor sayfaları bulunan bölgeler .
Görünümlere sahip denetleyiciler için bölgeler
alanları, denetleyicileri ve görünümleri kullanan tipik bir ASP.NET Core web uygulaması şunları içerir:
Bir alan klasörü yapısı.
Denetleyiciyi içeren ve
[Area]denetleyiciyi alanla ilişkilendiren denetleyiciler:[Area("Products")] public class ManageController : Controller {Başlangıç alanına eklenen alan yolu:
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?}"); });
Alan klasörü yapısı
İki mantıksal grup, ürün ve hizmet içeren bir uygulamayı düşünün. Alan kullanarak, klasör yapısı aşağıdakine benzer olacaktır:
- Proje adı
- Alanlar
- Ürünler
- Denetleyiciler
- HomeController. cs
- ManageController. cs
- Görünümler
- Home
- Index.cshtml
- Yönetme
- Index.cshtml
- . Cshtml hakkında
- Home
- Denetleyiciler
- Hizmetler
- Denetleyiciler
- HomeController. cs
- Görünümler
- Home
- Index.cshtml
- Home
- Denetleyiciler
- Ürünler
- Alanlar
Yukarıdaki düzen, alan kullanılırken tipik olsa da, bu klasör yapısını kullanmak için yalnızca görünüm dosyaları gereklidir. Eşleşen bir alan görünümü dosyası için bulma aramalarını aşağıdaki sırayla görüntüleyin:
/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
Denetleyiciyi bir alanla ilişkilendir
Alan denetleyicileri, [ alan ] özniteliğiyle belirlenir:
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();
}
}
}
Alan yolu Ekle
Alan rotaları genellikle öznitelik yönlendirme yerine geleneksel yönlendirmeyi kullanır. Geleneksel yönlendirme sıra bağımlıdır. Genel olarak, alanlar içeren rotalar, alan olmayan rotalardan daha belirgin olduklarından daha önce rota tablosuna yerleştirilmelidir.
{area:...} , URL alanı tüm alanlarda Tekdüzen ise yol şablonlarında bir belirteç olarak kullanılabilir:
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?}");
});
}
Önceki kodda, exists yolun bir alanla eşleşmesi gereken bir kısıtlama uygular. Kullanmak {area:...} , alanlara yönlendirme eklemek için en az karmaşık mekanizmadır.
Aşağıdaki kod, MapAreaRoute iki adlandırılmış alan yolları oluşturmak için kullanır:
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?}");
});
}
MapAreaRouteASP.NET Core 2,2 ile kullanırken, bu GitHub sorunabakın.
Daha fazla bilgi için bkz. alan yönlendirme.
MVC alanlarıyla bağlantı oluşturma
Örnek indirmenin aşağıdaki kodu, belirtilen alanla birlikte bağlantı oluşturmayı gösterir:
<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>
Yukarıdaki kodla oluşturulan bağlantılar, uygulamanın herhangi bir yerinde geçerlidir.
Örnek indirme, önceki bağlantıları içeren kısmi bir görünüm ve alanı belirtmeksizin aynı bağlantıları içerir. Kısmi görünüme, Düzen dosyasındabaşvurulur, bu nedenle uygulamadaki her sayfa oluşturulan bağlantıları görüntüler. Alanı belirtmeden oluşturulan bağlantılar yalnızca aynı alan ve denetleyicideki bir sayfadan başvuruluyorsa geçerlidir.
Alan veya denetleyici belirtilmediğinde, yönlendirme ortam değerlerine göre değişir. Geçerli isteğin geçerli yol değerleri, bağlantı oluşturma için çevresel değerler olarak kabul edilir. Örnek uygulama için birçok durumda, ortam değerlerini kullanmak yanlış bağlantılar oluşturur.
Daha fazla bilgi için bkz. Denetleyici eylemlerine yönlendirme.
_ViewStart. cshtml dosyasını kullanan alanların paylaşılan düzeni
Uygulamanın tamamında ortak bir düzen paylaşmak için _ViewStart. cshtml 'yi uygulama kök klasörüne taşıyın.
_ViewImports. cshtml
Standart konumunda /views/_ViewImports. cshtml , alanlara uygulanmaz. Ortak Etiket Yardımcıları, veya bölgenizde kullanmak için, @using @inject alan görünümleriniz içinuygun bir _ViewImports. cshtml dosyasının geçerli olduğundan emin olun. Tüm görünümlerinizin aynı davranışını istiyorsanız, /views/_ViewImports. cshtml öğesini uygulama köküne taşıyın.
Görünümlerin depolandığı varsayılan alan klasörünü değiştirme
Aşağıdaki kod varsayılan alan klasörünü ' den ' a "Areas" değiştirir "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();
}
Sayfaları olan bölgeler Razor
Sayfaları olan alanlarda, Razor Areas/<area name>/Pages uygulamanın kökünde bir klasör gerekir. Aşağıdaki klasör yapısı örnek uygulamaylabirlikte kullanılır:
- Proje adı
- Alanlar
- Ürünler
- Sayfalar
- _ViewImports
- Hakkında
- Dizin oluşturma
- Sayfalar
- Hizmetler
- Sayfalar
- Yönetme
- Hakkında
- Dizin oluşturma
- Yönetme
- Sayfalar
- Ürünler
- Alanlar
RazorSayfalar ve alanlarla bağlantı oluşturma
Örnek indirmenin aşağıdaki kodu, belirtilen alanla birlikte bağlantı oluşturmayı gösterir (örneğin, 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>
Yukarıdaki kodla oluşturulan bağlantılar, uygulamanın herhangi bir yerinde geçerlidir.
Örnek indirme, önceki bağlantıları içeren kısmi bir görünüm ve alanı belirtmeksizin aynı bağlantıları içerir. Kısmi görünüme, Düzen dosyasındabaşvurulur, bu nedenle uygulamadaki her sayfa oluşturulan bağlantıları görüntüler. Alanı belirtmeden oluşturulan bağlantılar yalnızca aynı alandaki bir sayfadan başvuruluyorsa geçerlidir.
Alan belirtilmediğinde, yönlendirme ortam değerlerine göre değişir. Geçerli isteğin geçerli yol değerleri, bağlantı oluşturma için çevresel değerler olarak kabul edilir. Örnek uygulama için birçok durumda, ortam değerlerini kullanmak yanlış bağlantılar oluşturur. Örneğin, aşağıdaki koddan oluşturulan bağlantıları göz önünde bulundurun:
<li>
<a asp-page="/Manage/About">
Services/Manage/About
</a>
</li>
<li>
<a asp-page="/About">
/About
</a>
</li>
Önceki kod için:
- Öğesinden oluşturulan bağlantı,
<a asp-page="/Manage/About">yalnızca son istek alanındaki bir sayfa için olduğunda doğrudurServices. Örneğin,,/Services/Manage//Services/Manage/Indexveya/Services/Manage/About. - Öğesinden oluşturulan bağlantı
<a asp-page="/About">yalnızca son istek içindeki bir sayfa için olduğunda doğrudur/Home. - Kod, örnek indirden.
Ad alanı ve etiket yardımcıları _ViewImports dosya ile içeri aktarma
Bir _ViewImports. cshtml dosyası her bir alan sayfaları klasörüne eklenerek, ad alanı ve etiket yardımcıları, klasördeki her bir Razor sayfaya alınır.
Örnek kodun bir _ViewImports. cshtml dosyası içermeyen Hizmetler alanını göz önünde bulundurun. Aşağıdaki biçimlendirme /Services/Manage/about Razor sayfasını göstermektedir:
@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>
Önceki biçimlendirmede:
- Modeli belirtmek için tam etki alanı adının kullanılması gerekir (
@model RPareas.Areas.Services.Pages.Manage.AboutModel). - Etiket Yardımcıları tarafından etkinleştirilir
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Örnek indirme sırasında, ürünler alanı aşağıdaki _ViewImports. cshtml dosyasını içerir:
@namespace RPareas.Areas.Products.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Aşağıdaki biçimlendirme /Products/about Razor sayfasını göstermektedir:
@page
@model AboutModel
@{
ViewData["Title"] = "Prod About";
}
<h2>Products/About</h2>
<a asp-area="Services" asp-page="/Manage/About">
Services/Manage/About
</a>
Önceki dosyada, ad alanı ve yönerge, @addTagHelper alan/ürün/sayfa/_ViewImports. cshtml dosyası tarafından dosyaya aktarılır.
Daha fazla bilgi için bkz. etiket Yardımcısı kapsamını yönetme ve paylaşılan yönergeleri içeri aktarma.
Sayfalar için paylaşılan Düzen Razor alanı
Uygulamanın tamamında ortak bir düzen paylaşmak için _ViewStart. cshtml 'yi uygulama kök klasörüne taşıyın.
Yayımlama alanı
Wwwroot dizinindeki tüm *. cshtml dosyaları ve dosyaları, <Project Sdk="Microsoft.NET.Sdk.Web"> *. csproj dosyasına dahil edildiğinde çıkışa yayımlanır.