Usando Panel o PlaceHolder

152

¿Cuál es la diferencia entre <asp:Panel >y <asp:PlaceHolder >en ASP.NET?

¿Cuándo deberías usar uno sobre el otro?

p.campbell
fuente

Respuestas:

161

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.

Steven Robbins
fuente
19
Un panel se convierte en un DIV
mbillard
44
También puede convertirse en un Span, dependiendo de la versión de ASP.Net y del navegador que está representando también.
Steven Robbins
9
Meh, no me hagas comenzar con BrowserCaps: también puede convertirse en una tabla de celda única en .Net 1.1 en los navegadores de "nivel inferior".
Zhaph - Ben Duguid
66
Heh, traté de forzar el procesamiento de tablas de nivel inferior fuera de mi mente ... gracias por traer eso de vuelta :-)
Steven Robbins
1
@Protectorone: Los comentarios anteriores son sobre paneles, no marcadores de posición.
Brian
63

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

  • Ajustar: Obtiene / Establece si el
    contenido del panel se ajusta

Hay un buen artículo en startvbnet aquí .

Ray Booysen
fuente
15
Otra característica interesante de un asp: el Panel es que tiene una propiedad DefaultButton, que le dice en qué botón hacer clic si el usuario presiona enter en su teclado. Es útil si tiene varios paneles y botones en la misma página que deben funcionar con el botón Intro.
Alex York
1
@Marko después de luchar con la herencia de control de usuario personalizado, estoy de acuerdo
drzaus
En 2009, cuando WebForms era la forma de facto .NET de hacer un desarrollador ASP.NET, entonces sí. En diciembre de 2012, casi 4 años después, probablemente no. Comentario extraño
Ray Booysen
1
El enlace startvbnet está muerto.
mmcglynn
1
Igual que mis comentarios anteriores, gracias por proporcionar detalles muy valiosos. Me ayudó a aclarar por qué estos se usaban en el código detrás en lugar de otras soluciones para un módulo DNN que estoy tratando de actualizar.
user1585204
36

Control PlaceHolder

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.Controlscolección para agregar, insertar o eliminar un control en el control PlaceHolder.

Panel de control

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 Directionpropiedad 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 BackImageUrpropiedad l para mostrar una imagen personalizada para el control del Panel. Use la ScrollBarspropiedad 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

ecleel
fuente
1
Esta es una excelente explicación detallada. Solo necesitaba ver por qué estas etiquetas se usaron donde. el desarrollador de un módulo (ahora desapareció misteriosamente :)) solo los creó dinámicamente en el código que se encuentra detrás. Nunca los he usado antes, después de haber sido un usuario de JavaScript en los últimos 7 años más o menos. Gracias por su valiosa contribución.
user1585204
5

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.

George Filippakos
fuente
55
¿La gente todavía usa el modo de vista de diseño? ;)
Matthew Lock
2
jaja - Dejé de usarlo hace años, pero MS todavía no ha solucionado el error
George Filippakos
¡Aún espero que esto se arregle!
Nikki Punjabi
1

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 DefaultButtonpropiedad. Cuando la ID coincide con un botón en el panel, activará una publicación de formulario con validación cuando enterse 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 enterdentroTextBox1

VDWWD
fuente