¿Cuál es la diferencia entre <asp:Panel >
y <asp:PlaceHolder >
en ASP.NET?
¿Cuándo deberías usar uno sobre el otro?
¿Cuál es la diferencia entre <asp:Panel >
y <asp:PlaceHolder >
en ASP.NET?
¿Cuándo deberías usar uno sobre el otro?
Respuestas:
Un panel se expande a un espacio (o un div), con su contenido dentro de él. Un marcador de posición es solo eso, un marcador de posición que se reemplaza por lo que haya puesto en él.
El marcador de posición no representa ninguna etiqueta por sí mismo, por lo que es ideal para agrupar contenido sin la sobrecarga de las etiquetas HTML externas.
El Panel tiene etiquetas HTML externas pero tiene algunas propiedades adicionales geniales.
BackImageUrl: Obtiene / Establece la URL de la imagen de fondo para el panel
HorizontalAlign: Obtiene / Establece la
alineación horizontal del contenido del padre
Hay un buen artículo en startvbnet aquí .
Use el control PlaceHolder como contenedor para almacenar los controles del servidor que se agregan dinámicamente a la página web. El control PlaceHolder no produce ningún resultado visible y se usa solo como contenedor para otros controles en la página web. Puede usar la Control.Controls
colección para agregar, insertar o eliminar un control en el control PlaceHolder.
El control del Panel es un contenedor para otros controles . Es especialmente útil cuando desea generar controles mediante programación, ocultar / mostrar un grupo de controles o localizar un grupo de controles.
La Direction
propiedad es útil para localizar el contenido de un control del Panel para mostrar texto para los idiomas que se escriben de derecha a izquierda, como el árabe o el hebreo.
El control Panel proporciona varias propiedades que le permiten personalizar el comportamiento y la visualización de su contenido. Use la BackImageUr
propiedad l para mostrar una imagen personalizada para el control del Panel. Use la ScrollBars
propiedad para especificar barras de desplazamiento para el control.
Pequeñas diferencias al representar HTML: un control PlaceHolder no representará nada, pero el control Panel se representará como a <div>
.
Más información en los foros de ASP.NET
Extraño error * en Visual Studio 2010, si coloca controles dentro de un marcador de posición, no los representa en modo de vista de diseño.
Esto es especialmente cierto para las etiquetas Hidenfields y Empty.
Me encantaría usar marcadores de posición en lugar de paneles, pero odio el hecho de que no puedo poner otros controles dentro de los marcadores de posición en tiempo de diseño en la GUI.
Como se mencionó en otras respuestas, el Panel genera un <div>
HTML, mientras que el PlaceHolder no. Pero hay muchas más razones por las que podrías elegir cualquiera de las dos.
¿Por qué un PlaceHolder?
Como no genera ninguna etiqueta propia, puede usarla de manera segura dentro de otro elemento que no pueda contener un <div>
, por ejemplo:
<table>
<tr>
<td>Row 1</td>
</tr>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>
También puede usar un PlaceHolder para controlar la Visibilidad de un grupo de Controles sin envolverlo en un <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>
Por qué un panel
Genera su propio <div>
y también se puede utilizar para envolver un grupo de Contols. Pero un Panel tiene muchas más propiedades que pueden ser útiles para formatear su contenido:
<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>
Pero la característica más útil es la DefaultButton
propiedad. Cuando la ID coincide con un botón en el panel, activará una publicación de formulario con validación cuando enter
se presione dentro de un cuadro de texto. Ahora un usuario puede enviar el formulario sin presionar el botón.
<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>
Pruebe el fragmento anterior presionando enter
dentroTextBox1