Подтвердить что ты не робот

Панель visible = true не влияет

У меня есть панель, в которой я устанавливаю 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, никаких других потоков или неуловимых ошибок, которые "должны" вмешиваться в мои члены.

4b9b3361

Ответ 1

Является ли ваша панель вложенной в другую панель или какой-либо другой тип контейнера с видимым значением 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 является "асимметричным": сеттер, кажется, помещает флаг в элемент управления, но Getter возвращает вычисленное значение, которое зависит от видимости внешних элементов и видимости внешних элементов сам контроль.

Не уверен, что это поможет вам вообще.

Ответ 2

Проблема решена: панель стала видимой, когда я удалил visible="false" из дочерних элементов управления.

Ответ 3

По умолчанию панель не имеет границы. Ваша панель там, вы просто не видите ее, потому что она пуста. Установите borderwidth = "1", и вы увидите свою пустую панель.