Utilisation de Panel ou PlaceHolder

152

Quelle est la différence entre <asp:Panel >et <asp:PlaceHolder >dans ASP.NET?

Quand devriez-vous utiliser l'un sur l'autre?

p.campbell
la source

Réponses:

161

Un panneau se développe en un span (ou un div), avec son contenu à l'intérieur. Un espace réservé est juste cela, un espace réservé qui est remplacé par tout ce que vous y mettez.

Steven Robbins
la source
19
Un panel devient DIV
mbillard
4
Il peut également devenir un Span, en fonction de la version d'ASP.Net et du navigateur qu'il rend également.
Steven Robbins
9
Meh, ne me lancez pas avec BrowserCaps - il peut également devenir un tableau à cellule unique dans .Net 1.1 sur les navigateurs "Downlevel".
Zhaph - Ben Duguid
6
Hé, j'ai essayé de forcer le rendu de table de niveau inférieur hors de mon esprit .. merci d'avoir apporté cette sauvegarde :-)
Steven Robbins
1
@Protectorone: Les commentaires ci-dessus concernent les panneaux, pas les espaces réservés.
Brian
63

L'espace réservé ne restitue aucune balise pour lui-même, il est donc idéal pour regrouper du contenu sans la surcharge des balises HTML externes.

Le Panel a des balises HTML externes mais a quelques propriétés supplémentaires intéressantes.

  • BackImageUrl: obtient / définit l'URL de l'image d'arrière-plan pour le panneau

  • HorizontalAlign: obtient / définit l'
    alignement horizontal du contenu du parent

  • Wrap: obtient / définit si le
    contenu du panneau est enveloppé

Il y a un bon article sur startvbnet ici .

Ray Booysen
la source
15
Une autre fonctionnalité intéressante d'un asp: Panel est qu'il a une propriété DefaultButton, lui indiquant sur quel bouton cliquer si l'utilisateur appuie sur Entrée sur son clavier. Pratique si vous avez plusieurs panneaux et boutons sur la même page qui doivent fonctionner avec le bouton Entrée.
Alex York
1
@Marko après avoir lutté avec l'héritage du contrôle utilisateur personnalisé, je suis d'accord
drzaus
En 2009, lorsque WebForms était la manière de facto .NET de faire du développement ASP.NET, alors oui. En décembre 2012, presque 4 ans plus tard probablement pas. Commentaire étrange
Ray Booysen
1
Le lien startvbnet est mort.
mmcglynn
1
Idem que mes commentaires ci-dessus - merci de fournir des détails très précieux. Cela a aidé à comprendre pourquoi ceux-ci étaient utilisés dans le code derrière au lieu d'autres solutions pour un module DNN que j'essaie de mettre à niveau.
user1585204
36

Contrôle PlaceHolder

Utilisez le contrôle PlaceHolder comme conteneur pour stocker les contrôles serveur qui sont ajoutés dynamiquement à la page Web. Le contrôle PlaceHolder ne produit aucune sortie visible et est utilisé uniquement comme conteneur pour d'autres contrôles sur la page Web. Vous pouvez utiliser la Control.Controlscollection pour ajouter, insérer ou supprimer un contrôle dans le contrôle PlaceHolder.

Contrôle du panneau

Le contrôle Panel est un conteneur pour d'autres contrôles . Il est particulièrement utile lorsque vous souhaitez générer des contrôles par programme, masquer / afficher un groupe de contrôles ou localiser un groupe de contrôles.

La Directionpropriété est utile pour localiser le contenu d'un contrôle Panel afin d'afficher le texte des langues écrites de droite à gauche, comme l'arabe ou l'hébreu.

Le contrôle Panel fournit plusieurs propriétés qui vous permettent de personnaliser le comportement et l'affichage de son contenu. Utilisez la BackImageUrpropriété l pour afficher une image personnalisée pour le contrôle Panel. Utilisez la ScrollBarspropriété pour spécifier les barres de défilement du contrôle.

Petites différences lors du rendu HTML: un contrôle PlaceHolder ne rendra rien, mais le contrôle Panel sera rendu sous forme de fichier <div>.

Plus d'informations sur les forums ASP.NET

ecleel
la source
1
C'est une excellente explication détaillée. J'avais juste besoin de voir pourquoi ces balises étaient utilisées où. le développeur d'un module (maintenant mystérieusement disparu :)) vient de les créer dynamiquement dans le code derrière. Je ne les ai jamais utilisés auparavant, ayant été un type de front-end JavaScript depuis environ 7 ans. Merci pour cette excellente contribution.
user1585204
5

J'ai un bug bizarre * dans Visual Studio 2010, si vous placez des contrôles dans un espace réservé, il ne les rend pas en mode d'affichage de conception.

Cela est particulièrement vrai pour les étiquettes Hidenfields et Empty.

J'adorerais utiliser des espaces réservés au lieu de panneaux, mais je déteste le fait que je ne peux pas mettre d'autres contrôles à l'intérieur des espaces réservés au moment de la conception dans l'interface graphique.

George Filippakos
la source
5
Les gens utilisent toujours le mode d'affichage de conception? ;)
Matthew Lock
2
haha - J'ai renoncé à l'utiliser il y a des années mais MS n'a toujours pas
résolu
J'attends toujours que cela soit réglé!
Nikki Punjabi
1

Comme mentionné dans d'autres réponses, le Panel génère un <div>en HTML, contrairement à PlaceHolder. Mais il y a beaucoup plus de raisons pour lesquelles vous pouvez choisir l'une ou l'autre.

Pourquoi un PlaceHolder?

Comme il ne génère aucune balise propre, vous pouvez l'utiliser en toute sécurité dans un autre élément qui ne peut pas contenir de <div>, par exemple:

<table>
    <tr>
        <td>Row 1</td>
    </tr>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>

Vous pouvez également utiliser un PlaceHolder pour contrôler la visibilité d'un groupe de contrôles sans l'envelopper dans 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>

Pourquoi un panel

Il génère son propre <div>et peut également être utilisé pour envelopper un groupe de contrôles. Mais un Panel a beaucoup plus de propriétés qui peuvent être utiles pour formater son contenu:

<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>

Mais la caractéristique la plus utile est la DefaultButtonpropriété. Lorsque l'ID correspond à un bouton dans le panneau, il déclenchera une publication de formulaire avec validation lorsque vous enterappuyez sur dans une zone de texte. Désormais, un utilisateur peut soumettre le formulaire sans appuyer sur le bouton.

<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>

Essayez l'extrait ci-dessus en appuyant à l' enterintérieurTextBox1

VDWWD
la source