Master page představuje jakýsi rámec s vyznačenými regiony, do kterých může stránka, která danou master page používá, vkládat obsah. Často se používá pro záhlaví a zápatí webu.
Při použití standardního boilerplate jsou master page umístěny ve složce masters
, kde v souboru main.master
je obsah hlavní master page:
<%@ Master %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <je:region runat="server" id="head" /> </head> <body> <header> <je:a runat="server" href="/cs/">My Site</a> </header> <je:region runat="server" id="main" /> </body> </html>
Controly <je:region>
vyznačují oblasti, do které budou stránky vkládat obsah. Jak je z příkladu vidět, regionů může být v masteru více, jen musí mít každý unikátní jméno zapsané v atributu id
. Master v .aspx stránce potom použijeme takto:
<%@ Page %> <je:master runat="server" href="/masters/main.master" /> <je:content runat="server" forRegion="head"> <h1>Headline</h1> <!-- obsah pro hlavičku --> </je:content> <je:content runat="server" forRegion="main"> <p>Body text</p> <!-- hlavní obsah --> </je:content>
V atributu forRegion
controlu <je:content>
použijeme jméno z atributu id
controlu <je:region>
, do kterého chceme obsah vypsat. Na stránce, která používá master, může mít každý <je:region>
maximálně jeden odpovídající <je:content>
. Pokud není <je:content>
pro některý <je:region>
uveden, považuje se za prázdný.
Poznámky
Kompletní a podrobný popis toho, jak funguje sestavení stránky, je uveden v článku Sestavení stránky, nicméně velmi zjednodušeně je to takto:
- control
<je:master>
je nahrazen obsahem cílového master souboru - na místa
<je:region>
jsou vloženy obsahy controlů<je:content>
Z tohoto důvodů nelze použít například zápis:
<je:container runat="server" expect="article"> <je:content runat="server" forRegion="main"> <!-- obsah stránky --> </je:content> </je:container>
Obsah <je:content>
bude totiž fakticky přemístěn mimo <je:container>
. Zápis:
<je:content runat="server" forRegion="main"> <je:container runat="server" expect="article"> <!-- obsah stránky --> </je:container> </je:content>
je zcela v pořádku.
Taktéž control <je:master>
lze uzavřít do kontejneru a v controlech <je:content>
používat relativní cesty k polím proměnných, tedy například:
<%@ Page %> <je:container runat="server" expect="article"> <je:master runat="server" href="/masters/main.master" /> </je:container> <je:content runat="server" forRegion="head"> <je:item runat="server" field=".extraHead" /> </je:content> <je:content runat="server" forRegion="main"> <je:item runat="server" field=".title" tag="h1" /> <je:item runat="server" field=".text" /> </je:content>
Jelikož <je:master>
bude nahrazen obsahem master souboru a obsahy <je:content>
budou vloženy namísto příslušných <je:region>
. Celý vygenerovaný obsah bude tedy zaobalen <je:container>
.