Megosztás a következőn keresztül:


Részleges nézetek a ASP.NET Core-ban

Steve Smith, Maher JENDOUBI, Rick Anderson és Scott Sauber

A részleges nézet olyan Razor korrektúrafájl (.cshtml) irányelv nélkül @page , amely html-kimenetet jelenít meg egy másik korrektúrafájl renderelt kimenetében.

A részleges nézet kifejezés egy MVC-alkalmazás fejlesztésekor használatos, ahol a korrektúrafájlokat nézeteknek nevezzük, vagy egy Razor Oldalak alkalmazást, ahol a korrektúrafájlokat lapoknak nevezzük. Ez a témakör általánosan MVC-nézetekre és a Razor Pages lapokra mint jelölőfájlokra hivatkozik.

Mintakód megtekintése vagy letöltése (hogyan töltsd le)

Mikor érdemes részleges nézeteket használni?

A részleges nézetek hatékonyan használhatók a következőkben:

  • Bontsa fel a nagy korrektúrafájlokat kisebb összetevőkre.

    Egy több logikai elemből álló nagy, összetett korrektúrafájlban előnyt jelent, ha az egyes darabokat részleges nézetbe különítjük el. A korrektúrafájl kódja kezelhető, mert a korrektúra csak a teljes oldalstruktúrát és a részleges nézetekre mutató hivatkozásokat tartalmazza.

  • Csökkentse a közös korrektúratartalmak ismétlődését a korrektúrafájlok között.

    Ha ugyanazokat a korrektúraelemeket használja a korrektúrafájlokban, a részleges nézet eltávolítja a korrektúra tartalmának duplikálását egy részleges nézetfájlba. Ha a korrektúra módosul a részleges nézetben, frissíti a részleges nézetet használó korrektúrafájlok renderelt kimenetét.

A részleges nézeteket nem szabad használni a gyakori elrendezési elemek karbantartásához. A gyakori elrendezési elemeket _Layout.cshtml fájlokban kell megadni.

Ne használjon részleges nézetet, ahol összetett renderelési logikára vagy kódvégrehajtásra van szükség a korrektúra megjelenítéséhez. Részleges nézet helyett használjon nézetösszetevőt.

Részleges nézetek deklarálása

A részleges nézet egy .cshtml jelölőfájl, amely nem tartalmaz @page irányelvet, és a Nézetek mappában (MVC) vagy a Pages mappában (Razor Pages) található.

Az ASP.NET Core MVC-ben a vezérlő ViewResult képes nézetet vagy részleges nézetet visszaadni. A Razor Pagesben egy PageModel objektumként megjelenített részleges nézetet adhat PartialViewResult vissza. A részleges nézetek hivatkozását és renderelését a Hivatkozás részleges nézet szakasz ismerteti.

Az MVC nézettől vagy az oldalmegjelenítéstől eltérően a részleges nézet nem fut _ViewStart.cshtml. További információ: _ViewStart.cshtmlElrendezés a ASP.NET Core-ban.

A részleges nézetfájlnevek gyakran aláhúzásjellel (_aláhúzásjellel) kezdődnek. Ez az elnevezési konvenció nem kötelező, de segít vizuálisan megkülönböztetni a részleges nézeteket a nézetektől és a lapoktól.

A részleges nézet a .cshtmlNézetek mappában karbantartott korrektúrafájl.

A vezérlő ViewResult egy nézetet vagy parciális nézetet képes visszaadni. A részleges nézetek hivatkozását és renderelését a Hivatkozás részleges nézet szakasz ismerteti.

Az MVC-nézet renderelésével ellentétben a részleges nézet nem fut _ViewStart.cshtml. További információ: _ViewStart.cshtmlElrendezés a ASP.NET Core-ban.

A részleges nézetfájlnevek gyakran aláhúzásjellel (_aláhúzásjellel) kezdődnek. Ez az elnevezési konvenció nem kötelező, de segít vizuálisan megkülönböztetni a részleges nézeteket a nézetektől.

Egy részleges nézetre való hivatkozás

Részleges nézet használata a Pages PageModelben Razor

A ASP.NET Core 2.0-s vagy 2.1-es verziójában a következő kezelőmetódus a _AuthorPartialRP.cshtml részleges nézetét jeleníti meg a válaszhoz:

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

A ASP.NET Core 2.2-ben vagy újabb verzióiban a kezelő metódus másik lehetőségként meghívhatja a Partial metódust egy PartialViewResult objektum létrehozásához:

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

Részleges nézet használata korrektúrafájlban

A korrektúrafájlon belül többféleképpen is hivatkozhat részleges nézetre. Javasoljuk, hogy az alkalmazások az alábbi aszinkron megjelenítési módszerek egyikét használják:

A korrektúrafájlon belül két módon hivatkozhat részleges nézetre:

Javasoljuk, hogy az alkalmazások az Aszinkron HTML-segédet használják.

Részleges címkesegítő

A részleges címkesegítő használatához ASP.NET Core 2.1 vagy újabb verzió szükséges.

A Részleges címke segéd aszinkron módon jeleníti meg a tartalmat, és HTML-szerű szintaxist használ:

<partial name="_PartialName" />

Fájlkiterjesztés esetén a Címkesegítő egy részleges nézetre hivatkozik, amely ugyanabban a mappában kell lennie, mint a részleges nézetet hívó korrektúrafájlnak:

<partial name="_PartialName.cshtml" />

Az alábbi példa egy részleges nézetre hivatkozik az alkalmazás gyökeréből. A tilde-perjellel (~/) vagy perjellel (/) kezdődő elérési utak az alkalmazás gyökerére vonatkoznak:

Razor Oldalak

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

Az alábbi példa egy relatív elérési úttal rendelkező részleges nézetre hivatkozik:

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

További információ: Részleges címkesegítő a ASP.NET Core-ban.

Aszinkron HTML-segéd

HTML segéd használata esetén az ajánlott eljárás a PartialAsync használata. PartialAsync egy IHtmlContent-be csomagolt Task<TResult> típust ad vissza. A metódusra a várt hívás előtagjának karakterrel @ történő előtagolásával hivatkozunk:

@await Html.PartialAsync("_PartialName")

Ha a fájlkiterjesztés jelen van, a HTML-segéd egy részleges nézetre hivatkozik, amely ugyanabban a mappában kell lennie, mint a részleges nézetet hívó korrektúrafájlnak:

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

Az alábbi példa egy részleges nézetre hivatkozik az alkalmazás gyökeréből. A tilde-perjellel (~/) vagy perjellel (/) kezdődő elérési utak az alkalmazás gyökerére vonatkoznak:

Razor Oldalak

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

Az alábbi példa egy relatív elérési úttal rendelkező részleges nézetre hivatkozik:

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

Másik lehetőségként egy részleges nézetet is megjeleníthet a használatával RenderPartialAsync. Ez a metódus nem ad vissza egy IHtmlContent. Közvetlenül a válaszba streameli a renderelt kimenetet. Mivel a metódus nem ad vissza eredményt, kódblokkon belül Razor kell meghívni:

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

Mivel RenderPartialAsync a streamek renderelt tartalmakat tartalmaznak, bizonyos helyzetekben jobb teljesítményt nyújt. Teljesítmény szempontjából kritikus helyzetekben mindkét megközelítéssel mérje fel az oldalt, és használja a gyorsabb választ generáló megközelítést.

Szinkron HTML-segéd

Partial és RenderPartial azok szinkron megfelelői PartialAsyncRenderPartialAsync. A szinkron megfelelők használata nem ajánlott, mert vannak olyan forgatókönyvek, amelyekben holtpontot jelentenek. A szinkron metódusok a jövőbeli kiadásokban való eltávolításra vannak megcélzva.

Important

Ha kódot kell végrehajtania, használjon nézetösszetevőt részleges nézet helyett.

Hívás Partial vagy RenderPartial eredményez egy Visual Studio elemező figyelmeztetést. Például a Partial jelenléte a következő figyelmeztető üzenetet eredményezi:

Az IHtmlHelper.Partial használata alkalmazás holtpontot eredményezhet. Fontolja meg a részleges< címkesegítő vagy az IHtmlHelper.PartialAsync használatát>.

Cserélje le a @Html.Partial hívásokat a @await Html.PartialAsync vagy a Részleges címke segédre. A részleges címkesegítő migrálásáról további információt a HTML-segédből történő migrálás című témakörben talál.

Részleges nézetfelderítés

Ha egy részleges nézetre fájlkiterjesztés nélküli név hivatkozik, a rendszer a következő helyeket keresi a megadott sorrendben:

Razor Oldalak

  1. A lap mappájának jelenleg történő végrehajtása
  2. Könyvtárdiagram a mappa felett az oldalon
  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

A részleges nézetfelderítésre a következő konvenciók vonatkoznak:

  • Az azonos fájlnévvel rendelkező különböző részleges nézetek akkor engedélyezettek, ha a részleges nézetek különböző mappákban találhatók.
  • Ha fájlkiterjesztés nélkül hivatkozik egy részleges nézetre, és a részleges nézet a hívó mappájában és a Megosztott mappában is jelen van, a hívó mappájának részleges nézete biztosítja a részleges nézetet. Ha a részleges nézet nem található a hívó mappájában, a részleges nézet a Megosztott mappából lesz megadva. A Megosztott mappa részleges nézeteit megosztott részleges nézeteknek vagy alapértelmezett részleges nézeteknek nevezzük.
  • A részleges nézetek láncoltak lehetnek – a részleges nézet egy másik részleges nézetet is meghívhat, ha a hívások nem körkörös hivatkozást alkotnak. A relatív elérési utak mindig az aktuális fájlhoz vannak viszonyítva, nem pedig a fájl gyökeréhez vagy szülőéhez.

Note

A Razorsection részleges nézetben definiált elem nem látható a szülő jelölő fájlok számára. Csak abban a részleges nézetben látható a section, amelyben definiálva van.

Adatok elérése részleges nézetekből

Ha egy részleges nézet példányosítva van, megkapja a szülő szótárának ViewData. A részleges nézetben lévő adatok frissítései nem maradnak meg a szülőnézetben. ViewData a részleges nézet változásai elvesznek, amikor a részleges nézet visszatér.

Az alábbi példa bemutatja, hogyan adhat át egy példányt ViewDataDictionary egy részleges nézetnek:

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

Egy modellt részleges nézetbe is átadhat. A modell lehet egyéni objektum. Átadhat egy modellt PartialAsync (tartalomblokkot jelenít meg a hívónak), vagy RenderPartialAsync (a tartalmat a kimenetre streameli):

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

Razor Oldalak

A mintaalkalmazásban a következő korrektúra az Pages/ArticlesRP/ReadRP.cshtml oldalról származik. A lap két részleges nézetet tartalmaz. A második részleges nézet egy modellben és ViewData a részleges nézetben halad át. A ViewDataDictionary konstruktor túlterhelése egy új ViewData szótár átadására szolgál, miközben megtartja a meglévő ViewData szótárat.

@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 az első részleges nézet, amelyet a ReadRP.cshtml jelölőfájl hivatkozik:

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

Pages/ArticlesRP/_ArticleSectionRP.cshtml a ReadRP.cshtml jelölőfájl által hivatkozott második részleges nézet:

@using PartialViewsSample.ViewModels
@model ArticleSection

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

MVC

A mintaalkalmazás alábbi jelölőnyelve megmutatja a Views/Articles/Read.cshtml nézetet. A nézet két részleges nézetet tartalmaz. A második részleges nézet egy modellben és ViewData a részleges nézetben halad át. A ViewDataDictionary konstruktor túlterhelése egy új ViewData szótár átadására szolgál, miközben megtartja a meglévő ViewData szótárat.

@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 az első részleges nézet, amelyet a Read.cshtml jelölőfájl hivatkozik:

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

Views/Articles/_ArticleSection.cshtml a Read.cshtml jelölőfájl által hivatkozott második részleges nézet:

@using PartialViewsSample.ViewModels
@model ArticleSection

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

Futásidőben a rendszer a részeket a szülő korrektúrafájl renderelt kimenetében jeleníti meg, amely maga is a megosztott _Layout.cshtmlfájlon belül jelenik meg. Az első részleges nézet megjeleníti a cikk szerzőjének nevét és közzétételének dátumát:

Abraham Lincoln

Ez a részleges nézet egy megosztott részleges nézetfájl elérési útjából származik<>. 1863. 11. 19. 12:00:00

A második részleges nézet a cikk szakaszait jeleníti meg:

Első szakasz indexe: 0

Nyolcvanhét évvel ezelőtt ...

Második szakasz indexe: 1

Most már elmerültünk egy nagy polgárháborúban, amely próbára teszi ...

Harmadik szakasz indexe: 2

De tágabb értelemben véve nem tudunk szentelni ...

További erőforrások