Как упоминалось в других ответах, 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