В чем разница между <asp:Panel >
и <asp:PlaceHolder >
в ASP.NET?
Когда вы должны использовать один над другим?
В чем разница между <asp:Panel >
и <asp:PlaceHolder >
в ASP.NET?
Когда вы должны использовать один над другим?
Ответы:
Панель расширяется до span (или div) с содержимым внутри. Заполнитель - это просто заполнитель, который заменяется тем, что вы в него вставили.
Заполнитель не отображает никаких тегов для себя, поэтому он отлично подходит для группировки контента без дополнительных внешних тегов HTML.
В Panel есть внешние HTML-теги, но есть некоторые интересные дополнительные свойства.
BackImageUrl: получает / устанавливает URL-адрес фонового изображения для панели.
HorizontalAlign: получает / устанавливает
горизонтальное выравнивание содержимого родителя
Существует хорошая статья на startvbnet здесь .
Используйте элемент управления PlaceHolder в качестве контейнера для хранения серверных элементов управления, которые динамически добавляются на веб-страницу. Элемент управления PlaceHolder не создает видимых результатов и используется только как контейнер для других элементов управления на веб-странице. Вы можете использовать Control.Controls
коллекцию для добавления, вставки или удаления элемента управления в элементе управления PlaceHolder.
Элемент управления Panel является контейнером для других элементов управления . Это особенно полезно, когда вы хотите создать элементы управления программно, скрыть / показать группу элементов управления или локализовать группу элементов управления.
Это Direction
свойство полезно для локализации содержимого элемента управления Panel для отображения текста для языков, написанных справа налево, таких как арабский или иврит.
Элемент управления Panel предоставляет несколько свойств, которые позволяют настраивать поведение и отображение его содержимого. Используйте BackImageUr
свойство l для отображения пользовательского изображения для элемента управления Panel. Используйте ScrollBars
свойство, чтобы указать полосы прокрутки для элемента управления.
Небольшие различия при рендеринге HTML: элемент управления PlaceHolder не будет отображать ничего, но элемент управления Panel будет отображаться как <div>
.
Больше информации на форумах ASP.NET
Странная ошибка * в Visual Studio 2010: если вы помещаете элементы управления в Placeholder, они не отображаются в режиме просмотра дизайна.
Это особенно верно для меток Hidenfields и Empty.
Я хотел бы использовать заполнители вместо панелей, но я ненавижу тот факт, что не могу поместить другие элементы управления в заполнители во время разработки в GUI.
Как упоминалось в других ответах, 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