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>.