Quelle est la différence entre <asp:Panel >
et <asp:PlaceHolder >
dans ASP.NET?
Quand devriez-vous utiliser l'un sur l'autre?
Quelle est la différence entre <asp:Panel >
et <asp:PlaceHolder >
dans ASP.NET?
Quand devriez-vous utiliser l'un sur l'autre?
Réponses:
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.
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
Il y a un bon article sur startvbnet ici .
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.Controls
collection pour ajouter, insérer ou supprimer un contrôle dans le contrôle PlaceHolder.
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 Direction
proprié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 BackImageUr
propriété l pour afficher une image personnalisée pour le contrôle Panel. Utilisez la ScrollBars
proprié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
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.
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 DefaultButton
propriété. Lorsque l'ID correspond à un bouton dans le panneau, il déclenchera une publication de formulaire avec validation lorsque vous enter
appuyez 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' enter
intérieurTextBox1