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