ASP.NET Core'de kısmi görünümler
Steve Smith, Maher JENDOUBI, Rick Andersonve Scott Scott Jrer
Kısmi görünüm, html çıkışını başka bir işaretleme dosyasının işlenmiş çıktısı içinde işleme yönergesi olmayan bir işaretleme Razor dosyasıdır (.cshtml). @page
Kısmi görünüm terimi, işaretleme dosyalarının görünümler olarak çağrıldıları bir MVC uygulaması geliştirmede veya işaretleme dosyalarının sayfa olarak çağrıldıları sayfalar Razor uygulaması olarak kullanılır. Bu konu genel olarak MVC görünümlerini ve Sayfalar Razor sayfalarını işaretleme dosyaları olarak ifade eder.
Örnek kodu görüntüleme veya indirme ( nasılindir)
Kısmi görünümler ne zaman kullanmalı?
Kısmi görünümler şunların etkili bir yolu olur:
Büyük işaretleme dosyalarını daha küçük bileşenlere parçalara ayrılma.
Birkaç mantıksal parçadan oluşan büyük, karmaşık bir işaretleme dosyasında, her parçayla kısmi görünümde yalıtılmış şekilde çalışmanın bir avantajı vardır. işaretlemesi yalnızca genel sayfa yapısını ve kısmi görünümlere başvuruları içerdiği için işaretleme dosyasındaki kod yönetilebilir.
Biçimlendirme dosyaları arasında ortak işaretleme içeriğinin çoğaltılması sayısını azaltma.
İşaretleme dosyalarında aynı işaretleme öğeleri kullanılırken, kısmi bir görünüm işaretleme içeriğinin çoğaltılması tek bir kısmi görünüm dosyasına kaldırır. Kısmi görünümde işaretleme değiştiriken, kısmi görünümü kullanan işaretleme dosyalarının işlenmiş çıktısını günceller.
Ortak düzen öğelerini korumak için kısmi görünümler kullanılmaması gerekir. Ortak düzen öğeleri _Layout.cshtml dosyalarında belirtilmelidir.
Işaretlemeyi işlemek için karmaşık işleme mantığının veya kod yürütmenin gerekli olduğu kısmi bir görünüm kullanma. Kısmi görünüm yerine bir görünüm bileşeni kullanın.
Kısmi görünümleri bildir
Kısmi görünüm, Görünümler klasörü (MVC) veya Sayfalar klasörü ( Sayfalar) içinde bakımı yapılan yönergesi olmayan bir .cshtml @page işaretleme Razor dosyasıdır.
MVC ASP.NET Core de denetleyicinin bir görünümü veya ViewResult kısmi görünümü döndürebilecek özelliği vardır. RazorSayfalar'da, PageModel bir nesnesi olarak temsil edilen kısmi bir görünüm geri PartialViewResult getirebilirsiniz. Kısmi görünümlere başvuru ve kısmi görünümleri işleme, Kısmi görünüm başvurusu bölümünde açıklanmıştır.
MVC görünümünden veya sayfa işlemeden farklı olarak kısmi görünüm _ViewStart.cshtml dosyasını çalıştırmaz. _ViewStart.cshtml hakkında daha fazla bilgi için bkz. ASP.NET Core'de düzen .
Kısmi görünüm dosya adları genellikle bir alt çizgi () ile _ başlar. Bu adlandırma kuralı gerekli değildir, ancak kısmi görünümleri görünümlerden ve sayfalardan görsel olarak ayırmaya yardımcı olur.
Kısmi görünüm, Görünümler klasöründe bakımı yapılan bir .cshtml işaretleme dosyasıdır.
Denetleyicinin bir ViewResult görünümü veya kısmi görünümü döndürebilecek özelliği vardır. Kısmi görünümlere başvuru ve kısmi görünümleri işleme, Kısmi görünüm başvurusu bölümünde açıklanmıştır.
MVC görünümü işlemeden farklı olarak, kısmi görünüm _ViewStart.cshtml dosyasını çalıştırmaz. _ViewStart.cshtml hakkında daha fazla bilgi için bkz. ASP.NET Core'de düzen .
Kısmi görünüm dosya adları genellikle bir alt çizgi () ile _ başlar. Bu adlandırma kuralı gerekli değildir, ancak kısmi görünümleri görünümlerden görsel olarak ayırmaya yardımcı olur.
Kısmi görünüme başvuru
Sayfalar Razor PageModel'de kısmi görünüm kullanma
Aşağıdaki ASP.NET Core 2.0 veya 2.1'de, aşağıdaki işleyici yöntemi _ yanıta AuthorPartialRP.cshtml kısmi görünümünü işler:
public IActionResult OnGetPartial() =>
new PartialViewResult
{
ViewName = "_AuthorPartialRP",
ViewData = ViewData,
};
2 ASP.NET Core 2.2 veya sonraki bir zaman için bir işleyici yöntemi, bir nesnesi Partial üretmek için yöntemini alternatif olarak PartialViewResult çağırabilirsiniz:
public IActionResult OnGetPartial() =>
Partial("_AuthorPartialRP");
Biçimlendirme dosyasında kısmi görünüm kullanma
Bir işaretleme dosyasında kısmi görünüme başvuru yapmak için çeşitli yollar vardır. Uygulamaların aşağıdaki zaman uyumsuz işleme yaklaşımlarından birini kullanmalarını öneririz:
Bir işaretleme dosyasında kısmi görünüme başvuru yapmak için iki yol vardır:
Uygulamaların Zaman Uyumsuz HTML Yardımcı'sı kullanmalarını öneririz.
Kısmi Etiket Yardımcısı
Kısmi Etiket Yardımcısı için 2.1 ASP.NET Core veya sonraki bir güncelleştirmesi gerekir.
Kısmi Etiket Yardımcısı içeriği zaman uyumsuz olarak işler ve HTML'ye benzer bir söz dizimi kullanır:
<partial name="_PartialName" />
Bir dosya uzantısı mevcut olduğunda, Etiket Yardımcısı kısmi görünümü çağıran işaretleme dosyasıyla aynı klasörde olması gereken kısmi bir görünüme başvurur:
<partial name="_PartialName.cshtml" />
Aşağıdaki örnek, uygulama kökünden kısmi bir görünüme başvurur. Tilde-slash ( ) veya eğik çizgi ( ) ile baş alan ~/ / yollar, uygulama köküne başvurur:
Razor Sayfa
<partial name="~/Pages/Folder/_PartialName.cshtml" />
<partial name="/Pages/Folder/_PartialName.cshtml" />
MVC
<partial name="~/Views/Folder/_PartialName.cshtml" />
<partial name="/Views/Folder/_PartialName.cshtml" />
Aşağıdaki örnek göreli yola sahip kısmi bir görünüme başvurur:
<partial name="../Account/_PartialName.cshtml" />
Daha fazla bilgi için bkz. ASP.NET Core kısmi etiket Yardımcısı.
Zaman Uyumsuz HTML Yardımcısı
HTML Yardımcısı kullanırken en iyi yöntem PartialAsync kullanmaktır. PartialAsync , içinde IHtmlContent sarmalanmış bir tür Task<TResult> döndürür. yöntemine, beklenen çağrının önüne bir karakter ek olarak @ başvurıldı:
@await Html.PartialAsync("_PartialName")
Dosya uzantısı mevcut olduğunda, HTML Yardımcısı kısmi görünümü çağıran işaretleme dosyasıyla aynı klasörde olması gereken kısmi bir görünüme başvurur:
@await Html.PartialAsync("_PartialName.cshtml")
Aşağıdaki örnek, uygulama kökünden kısmi bir görünüme başvurur. Tilde-slash ( ) veya eğik çizgi ( ) ile baş alan ~/ / yollar, uygulama köküne başvurur:
Razor Sayfa
@await Html.PartialAsync("~/Pages/Folder/_PartialName.cshtml")
@await Html.PartialAsync("/Pages/Folder/_PartialName.cshtml")
MVC
@await Html.PartialAsync("~/Views/Folder/_PartialName.cshtml")
@await Html.PartialAsync("/Views/Folder/_PartialName.cshtml")
Aşağıdaki örnek göreli yola sahip kısmi bir görünüme başvurur:
@await Html.PartialAsync("../Account/_LoginPartial.cshtml")
Alternatif olarak, ile kısmi bir görünümü RenderPartialAsync işabilirsiniz. Bu yöntem bir IHtmlContent dönmez. İşlenen çıkışı doğrudan yanıta akışla iletir. yöntemi bir sonuç dönmez, bunun bir kod bloğu içinde Razor çağrılmış olması gerekir:
@{
await Html.RenderPartialAsync("_AuthorPartial");
}
Akışlar RenderPartialAsync işlenen içerikler sayesinde bazı senaryolarda daha iyi performans sunar. Performans açısından kritik durumlarda, her iki yaklaşımı kullanarak sayfayı kıyaslama ve daha hızlı yanıt oluşturan yaklaşımı kullanın.
Zaman Uyumlu HTML Yardımcısı
Partial ve RenderPartial sırasıyla ve zaman uyumlu PartialAsync RenderPartialAsync eşdeğerleridir. Zaman uyumlu eşdeğerler önerilmez çünkü kilitlenmeleri olan senaryolar vardır. Zaman uyumlu yöntemler, gelecekteki bir sürümde kaldırılmasını hedefler.
Önemli
Kodu yürütmeniz gerekirse kısmi görünüm yerine bir görünüm bileşeni kullanın.
çağrısı Partial veya RenderPartial bir çözümleyici Visual Studio sonuç verir. Örneğin, varlığı Partial aşağıdaki uyarı iletisini sağlar:
IHtmlHelper.Partial kullanımı uygulama kilitlenmeleri ile sonuçlandırabilirsiniz. Kısmi Etiket < Yardımcı > veya IHtmlHelper.PartialAsync kullanmayı göz önünde bulundurabilirsiniz.
çağrılarını @Html.Partial ile @await Html.PartialAsync veya Kısmi Etiket Yardımcısı ile değiştirin. Kısmi Etiket Yardımcı geçişi hakkında daha fazla bilgi için bkz. HTML Yardımcısı'dan geçiş.
Kısmi görünüm bulma
Dosya uzantısı olmadan bir kısmi görünüme adla başvurulsa, aşağıdaki konumlar belirtilen sırayla aranır:
Razor Sayfa
- Şu anda sayfanın klasörü yürütül devam ediyor
- Sayfanın klasörünün üzerindeki dizin grafiği
/Shared/Pages/Shared/Views/Shared
MVC
/Areas/<Area-Name>/Views/<Controller-Name>/Areas/<Area-Name>/Views/Shared/Views/Shared/Pages/Shared
/Areas/<Area-Name>/Views/<Controller-Name>/Areas/<Area-Name>/Views/Shared/Views/Shared
Aşağıdaki kuralları kısmi görünüm bulma için geçerlidir:
- Kısmi görünümler farklı klasörlerde olduğunda aynı dosya adına sahip farklı kısmi görünümlere izin verilir.
- Dosya uzantısı olmadan bir kısmi görünüme başvurulsa ve kısmi görünüm hem çağıranın klasöründe hem de Paylaşılan klasöründe mevcutsa, çağıranın klasöründeki kısmi görünüm kısmi görünümü sağlar. Kısmi görünüm çağıranın klasöründe yoksa, kısmi görünüm Paylaşılan klasörden sağlanır. Paylaşılan klasördeki kısmi görünümler paylaşılan kısmi görünümler veya varsayılan kısmi görünümler olarak adlandırılan bir dosyadır.
- Kısmi görünümler, çağrılar tarafından döngüsel bir başvuru kurulmasa kısmi görünümler başka bir — kısmi görünümü çağırarak zincirleme olabilir. Göreli yollar her zaman geçerli dosyayla görelidir, dosyanın köküne veya üst öğesine göre değildir.
Not
Kısmi Razor section görünümde tanımlanan bir, üst işaretleme dosyaları için görünmez. sectionYalnızca tanımlandığı kısmi görünüm için görülebilir.
Kısmi görünümlerde verilere erişin
Kısmi bir görünüm örneği oluşturulduğunda, üst öğenin sözlüğünün bir kopyasını alır ViewData . Kısmi görünüm içindeki verilerde yapılan güncelleştirmeler üst görünümde kalıcı değildir. ViewData kısmi görünüm geri döndüğünde kısmi görünümdeki değişiklikler kaybolur.
Aşağıdaki örnek, bir ViewDataDictionary örneğinin kısmi bir görünüme nasıl geçirileceğini göstermektedir:
@await Html.PartialAsync("_PartialName", customViewData)
Bir modeli kısmi bir görünüme geçirebilirsiniz. Model özel bir nesne olabilir. Bir modeli ile geçirebilirsiniz PartialAsync (bir içerik bloğunu çağırana kaydedebilir) veya RenderPartialAsync (içeriği çıkışa akıp):
@await Html.PartialAsync("_PartialName", model)
Razor Sayfaları
Örnek uygulamada aşağıdaki biçimlendirme, Pages/ArticlesRP/ReadRP. cshtml sayfasından yapılır. Sayfada iki kısmi görünüm bulunur. İkinci kısmi görünüm bir modelde ve ViewData kısmi görünüme geçer. ViewDataDictionaryOluşturucu aşırı yüklemesi, ViewData var olan sözlüğü korurken yeni bir sözlüğü geçirmek için kullanılır ViewData .
@model ReadRPModel
<h2>@Model.Article.Title</h2>
@* Pass the author's name to Pages\Shared\_AuthorPartialRP.cshtml *@
@await Html.PartialAsync("../Shared/_AuthorPartialRP", Model.Article.AuthorName)
@Model.Article.PublicationDate
@* Loop over the Sections and pass in a section and additional ViewData to
the strongly typed Pages\ArticlesRP\_ArticleSectionRP.cshtml partial view. *@
@{
var index = 0;
foreach (var section in Model.Article.Sections)
{
await Html.PartialAsync("_ArticleSectionRP",
section,
new ViewDataDictionary(ViewData)
{
{ "index", index }
});
index++;
}
}
Pages/Shared/_AuthorPartialRP. cshtml , readrp. cshtml işaretleme dosyası tarafından başvurulan ilk kısmi görünümüdür:
@model string
<div>
<h3>@Model</h3>
This partial view from /Pages/Shared/_AuthorPartialRP.cshtml.
</div>
Pages/ArticlesRP/_ArticleSectionRP. cshtml , readrp. cshtml biçimlendirme dosyası tarafından başvurulan ikinci kısmi görünümüdür:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
@Model.Content
</div>
MVC
Örnek uygulamada aşağıdaki biçimlendirme görünümleri/makaleleri/Read. cshtml görünümünü gösterir. Görünüm iki kısmi görünüm içerir. İkinci kısmi görünüm bir modelde ve ViewData kısmi görünüme geçer. ViewDataDictionaryOluşturucu aşırı yüklemesi, ViewData var olan sözlüğü korurken yeni bir sözlüğü geçirmek için kullanılır ViewData .
@model PartialViewsSample.ViewModels.Article
<h2>@Model.Title</h2>
@* Pass the author's name to Views\Shared\_AuthorPartial.cshtml *@
@await Html.PartialAsync("_AuthorPartial", Model.AuthorName)
@Model.PublicationDate
@* Loop over the Sections and pass in a section and additional ViewData to
the strongly typed Views\Articles\_ArticleSection.cshtml partial view. *@
@{
var index = 0;
foreach (var section in Model.Sections)
{
await Html.PartialAsync("_ArticleSection",
section,
new ViewDataDictionary(ViewData)
{
{ "index", index }
});
index++;
}
}
Views/Shared/_AuthorPartial. cshtml , Read. cshtml biçimlendirme dosyası tarafından başvurulan ilk kısmi görünümdür:
@model string
<div>
<h3>@Model</h3>
This partial view from /Views/Shared/_AuthorPartial.cshtml.
</div>
Görünümler/makaleler/_ArticleSection. cshtml Read. cshtml biçimlendirme dosyası tarafından başvurulan ikinci kısmi görünümdür:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
@Model.Content
</div>
Çalışma zamanında, partiler, kendisini paylaşılan _Layout. cshtml içinde işlenen üst biçimlendirme dosyasının işlenmiş çıktısına işlenir. İlk kısmi görünüm, makalenin adını ve yayımlama tarihini işler:
Abrayhelincoln
<Paylaşılan kısmi görünüm dosyası yolundan bu kısmi görünüm > . 11/19/1863 12:00:00
İkinci kısmi görünüm, makalenin bölümlerini işler:
Bölüm bir dizin: 0
Dört puan ve yedi yıl önce...
Bölüm Iki Dizin: 1
Artık harika bir hukuki War, test ediyor...
Bölüm üç Dizin: 2
Ancak, daha büyük bir fikir için ayıramıyoruz...