我有一个Panel,我明确地设置了visible=true
。调试器会越过该行,visible
仍会在下一行评估为False
。显然,小组没有显示。这怎么可能?
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,没有任何其他线程或简单的勘误表“应该”弄乱我的成员。
答案 0 :(得分:51)
您的面板是否嵌套在另一个面板或Visible设置为false的任何其他类型的容器中?
对于这种情况,您观察到的行为是可重现的。如果外部容器不可见,则禁止将内部容器的可见性设置为true是有意义的,因为这意味着内部必须不可见,甚至不是内部面板的空div。
Visible属性似乎取决于外部容器的可见性,例如:
<asp:Panel ID="Panel0" runat="server" Visible="false">
<asp:Panel ID="Panel1" runat="server" Visible="false">
Content...
</asp:Panel>
</asp:Panel>
此代码符合预期(首先使外部容器可见,然后是内部容器):
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
这段代码有点令人惊讶(首先让内部容器可见,然后是外部容器):
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
似乎设置和获取Visible属性是“非对称的”:Setter似乎在控件中放置一个标志,但Getter返回一个计算值,该值取决于外部元素的可见性和可见性控制自己。
不确定这对你是否有帮助。
答案 1 :(得分:0)
问题已解决:当我从子控件中删除visible="false"
时,面板变为可见。
答案 2 :(得分:0)
默认情况下,面板没有边框。你的面板在那里,你只是没有看到它,因为它是空的。设置borderwidth =“1”,您将看到空面板。