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