Navigace

Hlavnφ menu

 

Master Pages v ASP.NET 2.0

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

Jφcha, Radek (13. 1. 2005)

Novinky v ASP.NET 2.0

Nov² .NET Framework p°inßÜφ i novΘ mo₧nosti pro v²vojß°e web-based aplikacφ, v podob∞ nov²ch prvk∙ a mechanism∙ ASP.NET 2.0. KrßtkΘ seznßmenφ s vybran²mi novinkami vßm urΦit∞ napom∙₧e p°i p°echodu na novou verzi tΘto platformy. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!