Панель видимая = true не влияет - PullRequest
23 голосов
/ 29 марта 2010

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

Ответы [ 3 ]

51 голосов
/ 29 марта 2010

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

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

0 голосов
/ 29 марта 2010

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

0 голосов
/ 29 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...