Использование панели или PlaceHolder

В чем разница между <asp:Panel > и <asp:PlaceHolder > в ASP.NET?

Когда вы должны использовать один над другим?

Ответ 1

Панель расширяется до диапазона (или div), при этом содержимое внутри него. Заполнитель - это тот, который заменяет все, что вы в него вложили.

Ответ 2

Заполнитель не отображает теги для себя, поэтому он отлично подходит для группировки содержимого без накладных расходов внешних HTML-тегов.

Панель имеет внешние HTML-теги, но имеет некоторые дополнительные дополнительные свойства.

  • BackImageUrl: возвращает/устанавливает background image URL-адрес панели

  • HorizontalAlign: получает/устанавливает горизонтальное выравнивание родительского Содержание

  • Wrap: Получает/Устанавливает, будет ли обложки содержимого панели

В startvbnet есть хорошая статья здесь.

Ответ 3

Управление PlaceHolder

Используйте элемент управления PlaceHolder в качестве контейнера для хранения элементов управления сервером, которые динамически добавляются на веб-страницу. Элемент управления PlaceHolder не создает видимых результатов и используется только как контейнер для других элементов управления на веб-странице. Вы можете использовать коллекцию Control.Controls для добавления, вставки или удаления элемента управления в элементе управления PlaceHolder.

Панель управления

Элемент Panel - это контейнер для других элементов управления. Это особенно полезно, когда вы хотите программно сгенерировать элементы управления, скрыть/показать группу элементов управления или локализовать группу элементов управления.

Свойство Direction полезно для локализации содержимого панели управления для отображения текста для языков, которые написаны справа налево, например, на арабском или иврите.

Элемент управления Panel предоставляет несколько свойств, которые позволяют настраивать поведение и отображение его содержимого. Используйте свойство BackImageUr l для отображения пользовательского изображения для элемента управления Panel. Используйте свойство ScrollBars, чтобы указать полосы прокрутки для элемента управления.

Небольшие различия при рендеринге HTML: элемент управления PlaceHolder ничего не будет отображаться, но элемент управления панели будет отображаться как <div>.

Дополнительная информация на Форумы ASP.NET

Ответ 4

I weird bug * в visual studio 2010, если вы помещаете элементы управления внутри Placeholder, это не отображает их в режиме просмотра дизайна.

Это особенно верно для Hidenfields и Empty labels.

Я хотел бы использовать заполнители вместо панелей, но я ненавижу тот факт, что я не могу помещать другие элементы управления внутри заполнителей во время разработки в графическом интерфейсе.

Ответ 5

Как упоминалось в других ответах, Panel генерирует <div> в HTML, а PlaceHolder - нет. Но есть еще много причин, по которым вы можете выбрать один из них.

Почему PlaceHolder?

Поскольку он не генерирует собственный тэг, вы можете безопасно его использовать внутри другого элемента, который не может содержать <div>, например:

<table>
    <tr>
        <td>Row 1</td>
    </tr>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>

Вы также можете использовать PlaceHolder для управления видимостью группы элементов управления без ее упаковки в <div>

<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>

Почему панель

Он генерирует собственный <div> и может также использоваться для обертывания группы Contols. Но у панели есть намного больше свойств, которые могут быть полезны для форматирования содержимого:

<asp:Panel ID="Panel1" runat="server" Font-Bold="true"
    BackColor="Green" ForeColor="Red" Width="200"
    Height="200" BorderColor="Black" BorderStyle="Dotted">
    Red text on a green background with a black dotted border.
</asp:Panel>

Но наиболее полезной функцией является свойство DefaultButton. Когда идентификатор совпадает с кнопкой в ​​панели, он вызывает сообщение формы с проверкой, когда enter нажата внутри TextBox. Теперь пользователь может отправить форму без нажатия кнопки.

<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <br />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
        ErrorMessage="Input is required" ValidationGroup="myValGroup"
        Display="Dynamic" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValGroup" />
</asp:Panel>

Попробуйте приведенный выше фрагмент, нажав enter внутри TextBox1