Uživatelský control je samostatný kousek kódu, který lze v .aspx používat podobně jako klasický control. Hodí se pro často používané kousky kódu. Vlastně to není nic jiného, než obyčejný include. Obsah uživatelského controlu se vkládá na příslušné místo stránky a až poté je stránka zpracována. Lze proto v uživatelských controlech používat relativní cesty k proměnným. Viz sestavení stránky.
Soubor .ascx
Kód uživatelského controlu se umísťuje vždy do vlastního souboru s koncovkou .ascx, obvykle do složky /controls
, viz Adresářová struktura webu.
<%@ Control %> ...
Soubor .ascx obsahuje direktivu, která říká, že se jedná o uživatelský control. Po něm následuje normální kód .aspx.
Použití ve stránce
Uživatelský control lze použít v libovolné .aspx stránce včetně master page. Uživatelský control je třeba v .aspx zaregistrovat pomocí direktivy <%@ Register %>
, nejlépe hned na začátku za direktivou <%@ Page %>
nebo <%@ Master %>
:
<%@ Register tagPrefix="uc" tagName="myControl" src="~/controls/my.control.ascx" %>
Direktiva má tři atributy, všechny povinné:
- tagPrefix – určuje namespace, ve kterém bude control v .aspx dostupný – lze zvolit libovolný, jen by neměl kolidovat s jiným používaným namespace (tj.
je
,f
,s
). - tagName – určuje jméno uživatelského controlu, pod kterým bude v .aspx dostupný.
- src – obsahuje cestu ke controlu. Cesta může být uvedena relativně k .aspx souboru i absolutně z kořene virtuálního adresáře webu.
Příklad
Představme si, že máme blog a na některých jeho stránkách vypisujeme útržky článků – na homepage, na stránkách jednotlivých štítků atd. Kdybychom se časem rozhodli podobu útržků změnit, museli bychom přepsat kód ve všech stránkách. Proto si pro útržek článku vytvoříme uživatelský control controls/teaser.ascx
:
<%@ Control %> <article> <h1> <je:aVar runat="server" href="blogpost.aspx"> <je:item runat="server" field=".title" /> </je:aVar> </h1> <je:item runat="server" field=".date" tag="time" /> <je:item runat="server" field=".text" format="length: 300" tag="p" /> </article>
V .aspx control napřed registrujeme (ideálně hned na prvním řádku za direktivou <%@ Page %>
) a pak ho kdekoliv na stránce použijeme:
<%@ Page %> <%@ Register TagPrefix="uc" TagName="teaser" Src="~/controls/teaser.ascx" %> <je:repeater runat="server" source="articles"> <item> <uc:teaser runat="server" /> </item> </je:repeater>