Částečná zobrazení v ASP.NET Core

Steve Smith, Maher JENDOUBI, Rick Andersona Scottber

Částečné zobrazení je soubor Razor značek (.cshtml) bez direktivy, která vykresluje výstup HTML v rámci vykreslení výstupu jiného @page souboru s kódem.

Termín částečné zobrazení se používá při vývoji aplikace MVC, kde se soubory značek nazývají zobrazení, nebo aplikace Pages, kde se soubory značek Razor nazývají stránky. Toto téma obecně označuje zobrazení MVC a Razor stránky stránek jako soubory značek.

Zobrazení nebo stažení ukázkového kódu (stažení)

Kdy použít částečná zobrazení

Částečná zobrazení jsou efektivním způsobem, jak:

  • Rozdělit velké soubory s značkami na menší součásti.

    Ve velkém složitém souboru s kódem, který se skládá z několika logických částí, má práce s každou částí izolovanou do částečného zobrazení výhodu. Kód v souboru značek je spravovatelný, protože kód obsahuje pouze celkovou strukturu stránky a odkazy na částečná zobrazení.

  • Omezte duplikaci společného obsahu značek napříč soubory značek.

    Pokud se napříč soubory značek používají stejné elementy značek, částečné zobrazení odebere duplikaci obsahu značek do jednoho souboru částečného zobrazení. Když se kód v částečném zobrazení změní, aktualizuje vykreslený výstup souborů značek, které používají částečné zobrazení.

Částečná zobrazení by se neměla používat k zachování běžných prvků rozložení. Běžné prvky rozložení by měly být zadány v _Layout.cshtml.

Nepoužívejte částečné zobrazení, ve kterém se k vykreslení kódu vyžaduje složitá logika vykreslování nebo provádění kódu. Místo částečného zobrazení použijte komponentu zobrazení.

Deklarace částečných zobrazení

Částečné zobrazení je značek .cshtml bez direktivy udržované ve složce @page Views (MVC) nebo Pages ( Razor Pages).

V ASP.NET Core MVC může řadič vrátit zobrazení nebo ViewResult částečné zobrazení. V Razor části Stránky může objekt vrátit částečné zobrazení PageModel reprezentované jako PartialViewResult objekt. Odkazování na částečná zobrazení a jejich vykreslení je popsáno v části Odkazování na částečné zobrazení.

Na rozdíl od zobrazení MVC nebo vykreslování stránky nespouštěl částečný pohled _ViewStart.cshtml. Další informace o souboru _ViewStart.cshtml najdete v tématu Rozložení v ASP.NET Core .

Částečné názvy souborů zobrazení často začínají podtržítkem ( _ ). Tato konvence vytváření názvů není nutná, ale pomáhá vizuálně odlišit částečná zobrazení od zobrazení a stránek.

Částečné zobrazení je soubor značek .cshtml udržovaný ve složce Views.

Kontroler ViewResult může vrátit zobrazení nebo částečné zobrazení. Odkazování na částečná zobrazení a jejich vykreslení je popsáno v části Odkazování na částečné zobrazení.

Na rozdíl od vykreslování zobrazení MVC nespouštěl částečný pohled _ViewStart.cshtml. Další informace o souboru _ViewStart.cshtml najdete v tématu Rozložení v ASP.NET Core .

Částečné názvy souborů zobrazení často začínají podtržítkem ( _ ). Tato konvence vytváření názvů není nutná, ale pomáhá vizuálně odlišit částečná zobrazení od zobrazení.

Odkaz na částečné zobrazení

Použití částečného zobrazení v Razor modelu Pages PageModel

V ASP.NET Core 2.0 nebo 2.1 následující metoda obslužné rutiny vykreslí na odpověď částečné zobrazení _ AuthorPartialRP.cshtml:

public IActionResult OnGetPartial() =>
    new PartialViewResult
    {
        ViewName = "_AuthorPartialRP",
        ViewData = ViewData,
    };

V ASP.NET Core verze 2.2 nebo novější může metoda obslužné rutiny případně zavolat metodu Partial a vytvořit PartialViewResult objekt :

public IActionResult OnGetPartial() =>
    Partial("_AuthorPartialRP");

Použití částečného zobrazení v souboru s kódem

V rámci souboru s kódem existuje několik způsobů, jak odkazovat na částečné zobrazení. Doporučujeme, aby aplikace používají jeden z následujících asynchronních přístupů k vykreslování:

V souboru s kódem existují dva způsoby, jak odkazovat na částečné zobrazení:

Doporučujeme, aby aplikace používají asynchronní pomocníka HTML.

Pomocná rutina částečné značky

Pomocná osoba částečné značky vyžaduje ASP.NET Core verze 2.1 nebo novější.

Částečná pomocná funkce značky vykresluje obsah asynchronně a používá syntaxi ve formátu HTML:

<partial name="_PartialName" />

Pokud je k dispozici přípona souboru, pomocník značek odkazuje na částečné zobrazení, které musí být ve stejné složce jako soubor značek volající částečné zobrazení:

<partial name="_PartialName.cshtml" />

Následující příklad odkazuje na částečné zobrazení z kořenového adresáře aplikace. Cesty, které začínají lomítkem tildy ( ) nebo lomítkem ~/ ( / ), odkazují na kořen aplikace:

Razor Stránky

<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" />

Následující příklad odkazuje na částečné zobrazení s relativní cestou:

<partial name="../Account/_PartialName.cshtml" />

Další informace naleznete v tématu Podpora částečné značky v ASP.NET Core.

Asynchronní pomocná metoda HTML

Při použití pomocníka HTML je osvědčeným postupem použít PartialAsync . PartialAsync vrátí typ IHtmlContent zabalený v Task<TResult> objektu . Na metodu se odkazuje předponou čekajícího volání @ znakem:

@await Html.PartialAsync("_PartialName")

Pokud je k dispozici přípona souboru, pomocník HTML odkazuje na částečné zobrazení, které musí být ve stejné složce jako soubor značek volající částečné zobrazení:

@await Html.PartialAsync("_PartialName.cshtml")

Následující příklad odkazuje na částečné zobrazení z kořenového adresáře aplikace. Cesty, které začínají lomítkem tildy ( ) nebo lomítkem ~/ ( / ), odkazují na kořen aplikace:

Razor Stránky

@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")

Následující příklad odkazuje na částečné zobrazení s relativní cestou:

@await Html.PartialAsync("../Account/_LoginPartial.cshtml")

Alternativně můžete částečné zobrazení vykreslit pomocí RenderPartialAsync . Tato metoda nevrací IHtmlContent . Streamuje vykreslený výstup přímo do odpovědi. Vzhledem k tomu, že metoda nevrací výsledek, musí být volána v rámci Razor bloku kódu:

@{
    await Html.RenderPartialAsync("_AuthorPartial");
}

Vzhledem RenderPartialAsync k tomu, že streamy vykreslují obsah, poskytuje v některých scénářích lepší výkon. V situacích s kritickým výkonem srovnávací testy stránky použijte oba přístupy a použijte přístup, který generuje rychlejší odezvu.

Synchronní pomocná metoda HTML

Partial a RenderPartial jsou synchronní ekvivalenty a PartialAsync v uvedeném RenderPartialAsync pořadí. Synchronní ekvivalenty se nedoporučuje, protože existují scénáře, ve kterých dochází k vzájemnému zablokování. Synchronní metody jsou cílem odebrání v budoucí verzi.

Důležité

Pokud potřebujete spustit kód, místo částečného zobrazení použijte komponentu zobrazení.

Volání Partial nebo výsledkem je Visual Studio RenderPartial analyzátoru. Přítomnost funkce například Partial zobrazí následující upozornění:

Použití IHtmlHelper.Partial může způsobit zablokování aplikace. Zvažte < použití > částečného pomocníka značek nebo IHtmlHelper.PartialAsync.

Nahraďte volání @Html.Partial metody pomocí @await Html.PartialAsync nebo částečného pomocníka značky. Další informace o migraci částečného pomocníka značek najdete v tématu Migrace z pomocníka HTML.

Částečné zjišťování zobrazení

Pokud se na částečné zobrazení odkazuje pomocí názvu bez přípony souboru, prohledá se následující umístění ve stanoveném pořadí:

Razor Stránky

  1. Aktuálně spuštěná složka stránky
  2. Graf adresáře nad stránkou složky
  3. /Shared
  4. /Pages/Shared
  5. /Views/Shared

MVC

  1. /Areas/<Area-Name>/Views/<Controller-Name>
  2. /Areas/<Area-Name>/Views/Shared
  3. /Views/Shared
  4. /Pages/Shared
  1. /Areas/<Area-Name>/Views/<Controller-Name>
  2. /Areas/<Area-Name>/Views/Shared
  3. /Views/Shared

Na částečné zjišťování zobrazení se vztahují následující konvence:

  • Různá částečná zobrazení se stejným názvem souboru jsou povolena, pokud jsou částečná zobrazení v různých složkách.
  • Při odkazování na částečné zobrazení podle názvu bez přípony souboru a částečné zobrazení je k dispozici ve složce volajícího i ve složce Shared, částečné zobrazení ve složce volajícího poskytuje částečné zobrazení. Pokud částečné zobrazení není k dispozici ve složce volajícího, je částečné zobrazení poskytnuto ze složky Shared. Částečná zobrazení ve složce Shared se nazývají sdílená částečná zobrazení nebo výchozí částečná zobrazení.
  • Částečná zobrazení mohou být zřetězována, může částečné zobrazení volat jiné částečné zobrazení, pokud cyklický odkaz není — vytvořen voláními. Relativní cesty jsou vždy relativní vzhledem k aktuálnímu souboru, nikoli ke kořenovému adresáři nebo nadřazenému souboru.

Poznámka

Objekt Razor section definovaný v částečném zobrazení je pro nadřazené soubory značek neviditelný. Je section viditelný pouze pro částečné zobrazení, ve kterém je definováno.

Přístup k datům z částečných zobrazení

Když je vytvořena instance částečného zobrazení, obdrží kopii slovníku ViewData nadřazeného objektu. Aktualizace dat provedené v rámci částečného zobrazení se neuchová v nadřazeném zobrazení. ViewData Změny v částečném zobrazení se ztratí, když se částečné zobrazení vrátí.

Následující příklad ukazuje, jak předat instanci ViewDataDictionary do částečného zobrazení:

@await Html.PartialAsync("_PartialName", customViewData)

Model můžete předat do částečného zobrazení. Model může být vlastní objekt. Model můžete předat pomocí (vykreslí blok obsahu volajícímu) nebo PartialAsync RenderPartialAsync (streamuje obsah do výstupu):

@await Html.PartialAsync("_PartialName", model)

Razor Stránky

Následující kód v ukázkové aplikaci pochází ze stránky Pages/ArticlesRP/ReadRP.cshtml. Stránka obsahuje dvě částečná zobrazení. Druhé částečné zobrazení předá model a ViewData částečné zobrazení. Přetížení ViewDataDictionary konstruktoru slouží k předání nového slovníku při ViewData zachování existujícího ViewData slovníku.

@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 je první částečné zobrazení, na které odkazuje soubor značek ReadRP.cshtml:

@model string
<div>
    <h3>@Model</h3>
    This partial view from /Pages/Shared/_AuthorPartialRP.cshtml.
</div>

Pages/ArticlesRP/_ArticleSectionRP.cshtml je druhé částečné zobrazení, na které odkazuje soubor značek ReadRP.cshtml:

@using PartialViewsSample.ViewModels
@model ArticleSection

<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
    @Model.Content
</div>

MVC

Následující kód v ukázkové aplikaci ukazuje zobrazení Views/Articles/Read.cshtml. Zobrazení obsahuje dvě částečná zobrazení. Druhé částečné zobrazení předá model a ViewData částečné zobrazení. Přetížení ViewDataDictionary konstruktoru slouží k předání nového slovníku při ViewData zachování existujícího ViewData slovníku.

@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 je první částečné zobrazení, na které odkazuje soubor značek Read.cshtml:

@model string
<div>
    <h3>@Model</h3>
    This partial view from /Views/Shared/_AuthorPartial.cshtml.
</div>

Views/Articles/_ArticleSection.cshtml je druhé částečné zobrazení, na které odkazuje soubor značek Read.cshtml:

@using PartialViewsSample.ViewModels
@model ArticleSection

<h3>@Model.Title Index: @ViewData["index"]</h3>
<div>
    @Model.Content
</div>

Za běhu se částečné části vykreslují do vykreslení výstupu nadřazeného souboru značek, který se sám vykreslí v rámci sdíleného souboru _Layout.cshtml. První částečné zobrazení vykreslí jméno a datum publikování autora článku:

Abraham Vychemtát

Toto částečné zobrazení ze < sdílené cesty k souboru částečného zobrazení > 19. 11. 1863 12:00:00

Druhé částečné zobrazení vykreslí oddíly článku:

Index sekce 1: 0

Čtyři skóre a před sedmi lety...

Index 2. části: 1

Teď jsme zapojeni do velké občanské válek a testujeme...

Index 3. části: 2

Ve větším smyslu ale nemůžeme vymetit ...

Další materiály