我有一个面板,我明确设置visible = true。调试器通过该行,可见仍然在下一行评估为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>
alt text http://www.kconnolly.net/pics/visiblefalse.jpg
ASP.NET 2.0,没有其他线程或者是“应该”搞乱我的会员。
解决方法
您的面板是否嵌套在另一个面板或任何其他类型的容器中,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返回一个取决于外部元素的可视性和控件本身的可见性的计算值。
不知道这是否会帮助你。