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.
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.
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.
Problème résol: Le panneau est devenu visible lorsque j'ai supprimé visible="false"
à partir des contrôles enfants.