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>