web-dev-qa-db-fra.com

Panneau visible = vrai n'a aucun effet

J'ai un panneau que je configure visible=true explicitement. Le débogueur passe sur cette ligne et visible évalue toujours False sur la ligne suivante. De toute évidence, par conséquent, le panneau n'est pas affiché. Comment est-ce possible?

pnlValidate.Visible = true;
if (IsPostBack) return;
<asp:Panel ID="pnlValidate" runat="server">
    <asp:Button cssclass="submit2" ID="btnValidate" runat="server" Visible="false" text="Validate" OnClick="btnValidate_Click" /> <br />
    <asp:TextBox ID="txt6sql" runat="server" Visible="false" TextMode="multiLine" Width="500" Height="200" ReadOnly="true" ToolTip="Report SQL Statement" />
</asp:Panel>

ASP.NET 2.0, aucun autre thread ou errata bancal qui "devrait" déranger mes membres.

24
tsilb

Votre panneau est-il imbriqué dans un autre panneau ou tout autre type de conteneur dont Visible est défini sur false?

Pour une telle situation, le comportement que vous avez observé est reproductible. Il serait logique d'interdire de définir la visibilité sur true pour le conteneur intérieur si un conteneur externe est invisible, car cela signifie que rien à l'intérieur ne doit être visible, même pas le div vide du panneau intérieur.

La propriété Visible semble dépendre de la visibilité des conteneurs externes, par exemple:

<asp:Panel ID="Panel0" runat="server" Visible="false">
    <asp:Panel ID="Panel1" runat="server" Visible="false">
        Content...
    </asp:Panel>
</asp:Panel>

Ce code est comme prévu (rendre le conteneur externe visible en premier, puis le conteneur interne):

Panel0.Visible = true;
// Now Panel0.Visible returns true and Panel1.Visible returns false
Panel1.Visible = true;
// Now Panel0.Visible returns true and Panel1.Visible returns true

Ce code est quelque peu surprenant (rendre le conteneur interne visible en premier, puis le conteneur externe):

Panel1.Visible = true;
// Now Panel1.Visible returns false (!, your issue) and Panel0.Visible returns false
Panel0.Visible = true;
// Now Panel1.Visible returns true (!!) and Panel0.Visible returns true

Il semble que la définition et l'obtention de la propriété Visible soient "asymétriques": le Setter semble placer un indicateur dans le contrôle, mais le Getter pour renvoyer une valeur calculée qui dépend de la visibilité des éléments externes et de la visibilité du contrôle lui-même.

Je ne sais pas si cela vous aidera du tout.

52
Slauma

Par défaut, le panneau n'a pas de bordure. Votre panneau est là, vous ne le voyez pas car il est vide. Réglez borderwidth = "1" et vous verrez votre panneau vide.

1
Matt

Problème résol: Le panneau est devenu visible lorsque j'ai supprimé visible="false" à partir des contrôles enfants.

0
tsilb