Используя Panel или PlaceHolder - PullRequest
147 голосов
/ 27 января 2009

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

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

Ответы [ 5 ]

157 голосов
/ 27 января 2009

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

62 голосов
/ 27 января 2009

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

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

  • BackImageUrl: получает / устанавливает URL фонового изображения для панели

  • HorizontalAlign: Получает / Устанавливает
    горизонтальное выравнивание родителя содержание

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

Хорошая статья в startvbnet здесь .

35 голосов
/ 27 января 2009

PlaceHolder control

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

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

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

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

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

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

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

5 голосов
/ 13 октября 2011

Странная ошибка * в Visual Studio 2010, если вы помещаете элементы управления в Placeholder, они не отображаются в режиме просмотра дизайна.

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

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

1 голос
/ 19 октября 2017

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

<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

...