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

23
задан Michael 28 April 2017 в 19:51
поделиться

3 ответа

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

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

51
ответ дан 29 November 2019 в 01:32
поделиться

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

0
ответ дан 29 November 2019 в 01:32
поделиться

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

0
ответ дан 29 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: