Tentokrát bude mým úkolem seznámit vás s problematikou Master Pages na platformě .NET 2.0. Master Pages jsou jakési šablony, které vám umožní zachovat stejný vzhled celé webové aplikace s vynaložením opravdu minimálního úsilí. Zjednodušeně řečeno, vše funguje tak, že vytvoříme jedinou stránku (Master Page), kam umístíme základní prvky, které jsou pro celý web stejné (například menu, logo, footer) a určíme místo (nebo místa) kam budeme dynamicky „vkládat“ jednotlivé Content Pages v závislosti na konkrétním požadavku.

Abych předešel zbytečným nezdarům, hned na začátku připomínám, že Master Pages se vyskytují až ASP.NET 2.0. Kdybyste chtěli příklady z tohoto článku zkoušet v .NET Frameworku 1.x, nejspíš byste moc nepochodili. (V době vzniku tohoto textu je na webu Microsoftu k dispozici .NET Framework 2.0 ve verzi BETA 1.)

Postup při tvoření Master Page je víceméně stejný, jako postup při budování normální ASP.NET stránky. Celá změna spočívá pouze v tom, že místo direktivy <%@ Page %> použijete novou direktivu <%@ Master %> a zvláštní příponu vyhrazenou pouze pro Master Pages.master.

Do Master Page můžete vkládat všechny elementy stejným způsobem jako do klasické stránky. Většinou je v ní obsažena celá kostra stránky, včetně XHTML hlavičky. Master Page by navíc měla obsahovat speciální prvek ContentPlaceHolder. Ten může být pouze uvnitř Master Page a to v počtu neomezeném. Prvek ContentPlaceHolder představuje místo, kde se budou zobrazovat různé Content Pages vždy podle konkrétního požadavku.

Z mého dosavadního výkladu není jasné jak vůbec takový požadavek probíhá, tak raději splatím dluh hned teď. Požadavek je vždy směřován na .aspx stránky. Je-li tato stránka spojena s nějakou Master Page, je tato Master Page vyhledána, vezme se kód v ní a do příslušných prvků ContentPlaceHolder se nahrají jednotlivé části z požadované Content Page.

Pojďme ale vytvořit nějakou jednoduchou Master Page:

<%@ Master %>
<script runat=“server“>
 
</script>
<html>
 <head>
 <title>Simple Master Page</title>
</head>
<body>
 <form id=“form1″ runat=“server“>
  <table cellpadding=“5″>
   <tr>
    <td colspan=“2″>
     <h1>MOJE WEBSITE</h1>
    </td>
   </tr>
   <tr>
    <td style=“background-color: Silver“>
     <h3>Navigace</h3>
     <li><a href=“default.aspx“>Úvodní
stránka</a></li>
     <li><a href=“Contacts.aspx“>Kontakt</a></li>
    </td>
    <td>
     <asp:contentplaceholder id=“ContentPlaceHolder1″ runat=“server“>
     </asp:contentplaceholder>
    </td>
   </tr>
  </table>
 </form>
</body>
</html>

Toto je opravdu jednoduchá stránka (je mi jasné, že jako webdesignéra byste mě asi upálili). Teď jsou na řadě nějaké ty Content Pages, například úvodní stránka…

<%@ Page Language=“C#“ MasterPageFile=“~/MasterPage.master“ Title=“Moje Website – Úvodní stránka“%>
<asp:Content ID=“Content1″
    ContentPlaceHolderID=“ContentPlaceHolder1″
    Runat=“server“>
 Úvodní stránka…
</asp:Content>

…a seznam kontaktů:

<%@ Page Language=“C#“ MasterPageFile=“~/MasterPage.master“ Title=“Moje Website – Kontakty“%>
<asp:Content ID=“Content1″
     ContentPlaceHolderID=“ContentPlaceHolder1″
     Runat=“server“>
 Telefon: +420 777 888 999 <br/>
 ICQ: 123-456-789
</asp:Content>

Kód Content Page začíná direktivou <%@ Page %>. Chcete-li však, aby se tato stránka zobrazila uvnitř Master Page, budete muset přidat atribut MasterPageFile a uvést cestu k této „hostitelské“ stránce. Dále jsem použil atribut title, který překrývá element <title> v hlavičce základní stránky. Tento atribut není povinný, vynecháte-li ho, titulek se vezme z Master Page – v našem případě „Simple Master Page“.

Dále by měla Content Page obsahovat prvek <asp:Content />, který je jakýmsi nositelem samotného obsahu na Content Page. Mezi atributy, které byste neměli zapomenout, patří ID, Runat a ContentPlaceHolderId. Funkci prvních dvou zajisté vysvětlovat nemusím. Jak jsem již zmínil, Master Page může obsahovat i více než jeden ContentPlaceHolder, právě aribut ContentPlaceHolderId určuje, do kterého z nich se zobrazí obsah umístěný uvnitř prvku Content.

Čas od času je potřeba přistupovat k prvkům obsažených v Master Page z kódu uvnitř Content Page. Content Page obsahují vlastnost Master, která vrací odkaz na jejich aktuálně použitou Master Page. Chcete-li například změnit text prvku Label na Master Page, můžete to učinit takto:

Label masterLabel = (Label)Master.FindControl(„label“);
masterLabel.Text = „nový text na master page „;

Jak vidíte, Master Pages nabízejí vývojářům celkem slušný komfort při tvorbě rozsáhlejších webových aplikací. Je to jedna z povedených novinek v ASP.NET druhé generace. Je samozřejmě pravda, že tato inovace nepřinesla nic závratně nového, obdobného efektu se dalo dosáhnout například použitím prvku PlaceHolder na úvodní stránce a dynamického nahrávání User Controls podle parametru v URL a podobně, použití Master Pages je však už na první pohled mnohem pohodlnější a elegantnější, takže se celá aplikace stává o poznání přehlednější.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět