Panel visible = true无效

时间:2010-03-29 15:38:11

标签: asp.net visibility

我有一个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,没有任何其他线程或简单的勘误表“应该”弄乱我的成员。

3 个答案:

答案 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”,您将看到空面板。