Uživatelský control

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>

Připomínky a postřehy

Máte-li nějakou připomínku, dobrý nápad nebo jste našli v dokumentaci chybu, rádi od vás uslyšíme.