Vlastnost Visible třídy Control používáme k zobrazení a skrytí controlu ve stránce. Dokumentace říká něco mírně komplikovanějšího: Gets or sets a value that indicates whether a server control is rendered as UI on the page. Tato zdánlivá komplikovanost má zásadní význam. Getter property totiž vrací false, pokud je skrytý control nebo některý z jeho rodičů ve stromu controlů.
Z mého pohledu jde o dosti nezvyklé a vůči ostatním vlastnostem nekonzistentní chování. Neočekával bych, že po nastavení vlastnosti na true budu číst false. Doporučuji tedy s vlastností Visible pracovat náležitě opatrně.
Příklad
Mějme dva panely (PrvniPanel a DruhyPanel), přičemž chceme, aby byl vidět právě jeden z nich. Oba panely jsou obaleny vnějším panelem.
<asp:Panel ID="VnejsiPanel" Visible="false" runat="server"> <asp:Panel ID="PrvniPanel" runat="server"> ... </asp:Panel> <asp:Panel ID="DruhyPanel" runat="server"> ... </asp:Panel> </asp:Panel>
PrvniPanel.Visible = true; // nějaký výraz, který tentokrát vrací true DruhyPanel.Visible = !PrvniPanel.Visible VnejsiPanel.Visible = true;
- Na řádku 1 nastavíme první panel k zobrazení.
- Na řádku 2 přečteme property PrvniPanel.Visible. Ačkoliv jsme ji na řádku 1 nastavili na true, vrací false, neboť rodič VnejsiPanel ve stromu controlů je skrytý. I druhému panelu tedy nastavíme Visible na true.
- Na řádku 3 nastavíme vnější panel k zobrazení.
- Postupně jsme všem panelům nastavili Visible na true a bude tedy vidět vše, ačkoliv to tak na první pohled nevypadá.