This article has been localized into Hungarian by the community.
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ó.