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