設定しているパネルがあります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。他のスレッドや、メンバーを混乱させるはずのない不安定なエラッタはありません。
パネルは、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は外部要素の可視性とコントロール自体の可視性に依存する計算値を返します。
これがまったく役立つかどうかはわかりません。
デフォルトでは、パネルには境界線がありません。あなたのパネルは空です。 borderwidth = "1"を設定すると、空のパネルが表示されます。
問題解決:削除するとパネルが表示されましたvisible="false"
子コントロールから。