TOC

This article has been localized into Hungarian by the community.

Layoutok:

Szekciók

A layoutok lehetővé teszik, hogy közös tartalmat több oldalon keresztül felhasználj, de olykor szükség lehet arra, hogy az oldaltól függően kissé más tartalmat jeleníts meg. Gyakori példa erre a HEAD szekcióhoz JavaScript kód hozzáadása, egy újabb menüelem hozzáadása, vagy egy bizonyos oldalhoz tartozó oldalléc hozzáadása. Itt jönnek képbe a szekciók - lehetővé teszik egy hely megjelölését a layout fájlban, ahol a nézet saját markupot helyettesíthet be. Lássunk is egy példát, amivel tisztább lesz a kép.

Először is a már létező layout fájlunkhoz hozzáteszünk egy RenderSection() hivatkozást (ha még nincs layoutod a projektedben, akkor olvasd el az előző cikkeket, ott leírtuk, hogyan kell csinálni egyet):

_Layout.cshtml:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>_Layout</title>
</head>
<body>

@RenderBody()

<p>Lots of Layout content goes here...</p>

@RenderSection("Footer")

</body>
</html>

Figyeld meg a RenderSection() metódus használatát - hasonló, mint a RenderBody(), mivel csupán egy helyet határoz meg tartalom megjelenítésére. Ez esetben a "Footer" nevű szekciót szeretnénk megjeleníteni a nézet alján. Most definiálnunk kell ezt a szekciót azokon az oldalakon/nézeteken, ahol azt használni szeretnénk. Íme két nézet, amelyek a layoutot használják, de mindkettő más tartalmat tesz a Footer szekcióba:

About.cshtml:

@{
    ViewData["Title"] = "About";
}

@section Footer {
Hello from the About page!
}

<h2>About</h2>

Lásd a középső részt, ahol a Footer szekció tartalmát definiáljuk - itt a szintaxis igen egyszerű: a razor @ operátora a section kulcsszóval követve, majd a szekció neve. A kapcsos zárójeleken belül szerepel a szekció tartalma. Ebben az esetben a példa kedvéért csak egyszerű szöveget használunk, de persze lehetne itt markup is. Ezt próbáljuk is ki a Products nézetben:

Products.cshtml:

@{
ViewData["Title"] = "Products";
}

@section Footer {
<span>
Hello from the <b>Products</b> page!
</span>
}

<h2>Products</h2>

Ha már az előző cikkben leírtak alapján már van _ViewStart fájlod, akkor a két nézet most automatikusan a megfelelő layoutot fogja használni, az új szekciót is beleértve. Ezen a példán keresztül látható, hogy a két nézet ugyan felhasználja a layout fájl tartalmát, de a Footer szekcióba már sajátos tartalmat tesznek.

Választható szekciók

Alaphelyzetben minden szekció kötelező, akárcsak a body (test). Ha az oldal olyan layoutot használ, ahol egy vagy több szekció definiálva van, akkor a oldanak/nézetnek ezeket mind definiálnia kell - ha nem, az hibát fog eredményezni. Ez biztosítja azt, hogy minden oldal garantáltan tartalmazza a kívánt tartalmat. Könnyedén opcionálissá lehet azonban tenni egy szekciót amikor definiálod azt:

@RenderSection("Footer", required : false)

Figyeld az extra paramétert a RenderSection() metódusban - ez annyit tesz, hogy nem feltétlen szükséges ennek a szekciónak a jelenléte, tehát minden oldal esetében dönthetsz, hogy definiálod-e vagy sem. Ha nem, akkor semmi sem jelenik meg ezen a helyen.

Ellenőrizni, hogy egy szekció definiálva van

Ha egy szekció választható, akkor hasznos lehet tudni, hogy a felhasználó oldalon/nézeten definiálva van-e. Ezzel megadhatsz alapértelmezett tartalmat, ha az oldal/nézet nem ad meg sajátot, így:

@RenderSection("Footer", required : false)

@if(!IsSectionDefined("Footer"))
{
<span>Generic footer message!</span>
}

Így, ha a Footer sectiont nem definiálja egy oldal/nézet, akkor alapértelmezetten egy üzenet lesz megjelenítve helyette.

Összefoglaló

A szekciók lehetővé teszik bizonyos helyek megjelölését egy layoutban, ahová a layoutot használó nézetek/oldalak saját tartalmat olthatnak be. Ahogy a fenti példák mutatják, ez számos helyzetben jól használható.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!