ASP.NET Core'da kısmi görünümler
Steve Smith, Maher JENDOUBI, Rick Anderson ve Scott Sauber
Kısmi görünüm, başka bir Razor işaretleme dosyasının işlenmiş çıktısı içinde HTML çıkışını işleyen bir yönergesi olmayan bir @page
işaretleme dosyasıdır (.cshtml
).
Kısmi görünüm terimi, işaretleme dosyalarının görünüm olarak adlandırıldığı bir MVC uygulaması veya işaretleme dosyalarının sayfa olarak adlandırıldığı Sayfalar Razor uygulaması geliştirirken kullanılır. Bu konu genellikle MVC görünümlerini ve Razor Sayfalar sayfalarını işaretleme dosyaları olarak ifade eder.
Örnek kodu görüntüleme veya indirme (indirme)
Kısmi görünümler ne zaman kullanılır?
Kısmi görünümler şunlar için etkili bir yoldur:
Büyük işaretleme dosyalarını daha küçük bileşenlere ayırın.
Birkaç mantıksal parçadan oluşan büyük, karmaşık bir işaretleme dosyasında, kısmi görünümde yalıtılmış her parçayla çalışmanın bir avantajı vardır. İşaretlemeyi yalnızca genel sayfa yapısını içerdiğinden ve kısmi görünümlere başvurular içerdiğinden, işaretleme dosyasındaki kod yönetilebilir.
İşaretleme dosyaları arasında ortak işaretleme içeriğinin çoğaltılmışlığını azaltın.
İşaretleme dosyalarında aynı işaretleme öğeleri kullanıldığında, kısmi görünüm, işaretleme içeriğinin tek bir kısmi görünüm dosyasına çoğaltılma işlemini kaldırır. Kısmi görünümde işaretleme değiştirildiğinde, kısmi görünümü kullanan işaretleme dosyalarının işlenmiş çıkışını güncelleştirir.
Ortak düzen öğelerini korumak için kısmi görünümler kullanılmamalıdır. Ortak düzen öğeleri _Layout.cshtml dosyalarında belirtilmelidir.
İş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 kullanmayın. Kısmi görünüm yerine görünüm bileşeni kullanın.
Kısmi görünümleri bildirme
Kısmi görünüm, Views klasöründe (MVC) veya Pages klasöründe (RazorPages) korunan bir yönergesi olmayan bir @page
işaretleme dosyasıdır.cshtml
.
ASP.NET Core MVC'de denetleyicinin ViewResult görünümü veya kısmi görünümü döndürebilme özelliği vardır. Sayfalar'da Razor , nesne PageModel olarak temsil edilen kısmi bir PartialViewResult görünüm döndürebilir. Kısmi görünümlere başvurma ve görüntüleme, Kısmi görünüme başvurma 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 çalışmaz _ViewStart.cshtml
. hakkında _ViewStart.cshtml
daha fazla bilgi için bkz . ASP.NET Core'da düzen.
Kısmi görünüm dosyası adları genellikle bir alt çizgiyle (_
) başlar. Bu adlandırma kuralı gerekli değildir, ancak görünümlerden ve sayfalardan kısmi görünümleri görsel olarak ayırt etmeye yardımcı olur.
Kısmi görünüm, Görünümler klasöründe tutulan bir .cshtml
işaretleme dosyasıdır.
Denetleyicinin ViewResult görünümü veya kısmi görünümü döndürebilme özelliği vardır. Kısmi görünümlere başvurma ve görüntüleme, Kısmi görünüme başvurma bölümünde açıklanmıştır.
MVC görünümü işlemeden farklı olarak, kısmi görünüm çalışmaz _ViewStart.cshtml
. hakkında _ViewStart.cshtml
daha fazla bilgi için bkz . ASP.NET Core'da düzen.
Kısmi görünüm dosyası adları genellikle bir alt çizgiyle (_
) başlar. Bu adlandırma kuralı gerekli değildir, ancak kısmi görünümleri görünümlerden görsel olarak ayırt etmeye yardımcı olur.
Kısmi görünüme başvurma
Sayfalar PageModel'de Razor kısmi görünüm kullanma
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,
};
ASP.NET Core 2.2 veya sonraki sürümlerinde işleyici yöntemi alternatif olarak nesnesini oluşturmak PartialViewResult
için yöntemini çağırabilirPartial:
public IActionResult OnGetPartial() =>
Partial("_AuthorPartialRP");
biçimlendirme dosyasında kısmi görünüm kullanma
Bir işaretleme dosyası içinde, kısmi görünüme başvurmanın çeşitli yolları vardır. Uygulamaların aşağıdaki zaman uyumsuz işleme yaklaşımlarından birini kullanmasını öneririz:
Bir işaretleme dosyası içinde kısmi görünüme başvurmanın iki yolu vardır:
Uygulamaların Zaman Uyumsuz HTML Yardımcısı'nı kullanmasını öneririz.
Kısmi Etiket Yardımcısı
Kısmi Etiket Yardımcısı için ASP.NET Core 2.1 veya üzeri gerekir.
Kısmi Etiket Yardımcısı içeriği zaman uyumsuz olarak işler ve HTML benzeri 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şlayan yollar uygulama köküne başvurur:
Razor Sayfaları
<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 yolu olan kısmi bir görünüme başvurur:
<partial name="../Account/_PartialName.cshtml" />
Daha fazla bilgi için bkz . ASP.NET Core'da Kısmi Etiket Yardımcısı.
Zaman Uyumsuz HTML Yardımcısı
HTML Yardımcısı kullanırken en iyi yöntem kullanmaktır PartialAsync. PartialAsync
içinde sarmalanmış bir IHtmlContent Task<TResult>tür döndürür. Yöntemine, beklenen çağrıya bir @
karakter eklenerek başvurulur:
@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şlayan yollar uygulama köküne başvurur:
Razor Sayfaları
@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 yolu olan kısmi bir görünüme başvurur:
@await Html.PartialAsync("../Account/_LoginPartial.cshtml")
Alternatif olarak, ile RenderPartialAsynckısmi bir görünüm işleyebilirsiniz. Bu yöntem bir IHtmlContentdöndürmez. İşlenen çıkışı doğrudan yanıta akışla aktarır. yöntemi bir sonuç döndürmediğinden, bir Razor kod bloğu içinde çağrılmalıdır:
@{
await Html.RenderPartialAsync("_AuthorPartial");
}
RenderPartialAsync
Akışlar içerik işlendiği için bazı senaryolarda daha iyi performans sağlar. Performans açısından kritik durumlarda, her iki yaklaşımı da kullanarak sayfayı kıyaslayın ve daha hızlı yanıt oluşturan yaklaşımı kullanın.
Zaman Uyumlu HTML Yardımcısı
Partialve RenderPartial sırasıyla ve RenderPartialAsync
değerlerinin zaman uyumlu eşdeğerleridirPartialAsync
. Kilitlenme senaryoları olduğundan zaman uyumlu eşdeğerler önerilmez. Zaman uyumlu yöntemler, gelecek bir sürümde kaldırılmasını hedeflemektedir.
Önemli
Kod yürütmeniz gerekiyorsa, kısmi görünüm yerine bir görünüm bileşeni kullanın.
Çağırma Partial
veya RenderPartial
Visual Studio çözümleyicisi uyarısıyla sonuçlandırma. Örneğin, varlığı Partial
aşağıdaki uyarı iletisini verir:
IHtmlHelper.Partial kullanımı uygulama kilitlenmelerine neden olabilir. Kısmi> Etiket Yardımcısı veya IHtmlHelper.PartialAsync kullanmayı <göz önünde bulundurun.
veya @Html.Partial
Kısmi Etiket Yardımcısı ile @await Html.PartialAsync
çağrılarını değiştirin. Kısmi Etiket Yardımcısı geçişi hakkında daha fazla bilgi için bkz . HTML Yardımcısı'ndan geçiş.
Kısmi görünüm bulma
Dosya uzantısı olmayan ada göre kısmi bir görünüme başvurulduğunda, aşağıdaki konumlar belirtilen sırada aranılır:
Razor Sayfaları
- Şu anda sayfanın klasörü yürütülüyor
- 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
Kısmi görünüm bulma için aşağıdaki kurallar 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 ada göre kısmi görünüme başvururken ve kısmi görünüm hem çağıranın klasöründe hem de Paylaşılan klasöründe mevcut olduğunda, çağıranın klasöründeki kısmi görünüm kısmi görünümü sağlar. Arayanın klasöründe kısmi görünüm yoksa, kısmi görünüm Paylaşılan klasöründen sağlanır. Paylaşılan klasöründeki 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ılır.
- Kısmi görünümler zincirlenebilir; çağrılar tarafından döngüsel başvuru oluşturulmamışsa kısmi görünüm başka bir kısmi görünümü çağırabilir. Göreli yollar, dosyanın köküne veya üst öğesine değil, her zaman geçerli dosyaya göredir.
Not
Razor section
Kısmi görünümde tanımlanan bir öğe, üst işaretleme dosyaları için görünmez. section
yalnızca içinde tanımlandığı kısmi görünümde görünür.
Kısmi görünümlerden verilere erişme
Kısmi görünüm örneği görüntülendiğinde, üst ViewData
öğe sözlüğün bir kopyasını alır. Kısmi görünümdeki verilerde yapılan güncelleştirmeler üst görünümde kalıcı olmaz. ViewData
kısmi görünüm döndürdüğünde kısmi görünümdeki değişiklikler kaybolur.
Aşağıdaki örnek, örneğinin kısmi bir ViewDataDictionary görünüme nasıl geçir yapılacağını gösterir:
@await Html.PartialAsync("_PartialName", customViewData)
Modeli kısmi görünüme geçirebilirsiniz. Model özel bir nesne olabilir. Bir modeli ile PartialAsync
geçirebilirsiniz (arayana bir içerik bloğu oluşturur) veya RenderPartialAsync
(içeriği çıkışa akışla aktarır):
@await Html.PartialAsync("_PartialName", model)
Razor Sayfaları
Örnek uygulamada aşağıdaki işaretleme sayfadandır Pages/ArticlesRP/ReadRP.cshtml
. Sayfa iki kısmi görünüm içeriyor. İkinci kısmi görünüm bir modelde ve ViewData
kısmi görünüme geçer. ViewDataDictionary
Oluşturucu aşırı yüklemesi, mevcut ViewData
sözlüğü korurken yeni ViewData
bir sözlük geçirmek için kullanılır.
@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
, işaretleme dosyası tarafından başvuruda bulunılan ReadRP.cshtml
ilk kısmi görünümdür:
@model string
<div>
<h3>@Model</h3>
This partial view from /Pages/Shared/_AuthorPartialRP.cshtml.
</div>
Pages/ArticlesRP/_ArticleSectionRP.cshtml
, işaretleme dosyası tarafından başvuruda bulunılan ReadRP.cshtml
ikinci kısmi görünümdür:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
@Model.Content
</div>
MVC
Örnek uygulamadaki aşağıdaki işaretleme görünümü gösterir Views/Articles/Read.cshtml
. 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. ViewDataDictionary
Oluşturucu aşırı yüklemesi, mevcut ViewData
sözlüğü korurken yeni ViewData
bir sözlük geçirmek için kullanılır.
@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
, işaretleme dosyası tarafından başvuruda bulunılan Read.cshtml
ilk kısmi görünümdür:
@model string
<div>
<h3>@Model</h3>
This partial view from /Views/Shared/_AuthorPartial.cshtml.
</div>
Views/Articles/_ArticleSection.cshtml
, işaretleme dosyası tarafından başvuruda bulunılan Read.cshtml
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 kısmi değerler, paylaşılan _Layout.cshtml
içinde işlenen üst işaretleme dosyasının işlenmiş çıkışına işlenir. İlk kısmi görünüm makale yazarının adını ve yayın tarihini işler:
Abraham Lincoln
Paylaşılan kısmi görünüm dosya yolundan <>bu kısmi görünüm. 19.11.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 İki Dizin: 1
Şimdi büyük bir iç savaş yapıyoruz, test ...
Bölüm Üç Dizin: 2
Ancak, daha büyük bir anlamda, ...
Ek kaynaklar
ASP.NET Core