Utilizzando Panel o PlaceHolder
-
20-08-2019 - |
Domanda
Qual è la differenza tra <asp:Panel >
e <asp:PlaceHolder >
in ASP.NET?
Quando dovresti usarne uno sopra l'altro?
Soluzione
Un pannello si espande in un intervallo (o div), con il suo contenuto al suo interno. Un segnaposto è proprio questo, un segnaposto che viene sostituito da qualsiasi cosa tu ci abbia inserito.
Altri suggerimenti
Il segnaposto non esegue il rendering di alcun tag per sé, quindi è ottimo per raggruppare i contenuti senza l'overhead dei tag HTML esterni.
Il Pannello ha tag HTML esterni ma ha alcune interessanti proprietà extra.
-
BackImageUrl: Ottiene / imposta l'oggetto l'URL dell'immagine di sfondo per il pannello
-
HorizontalAlign: Ottiene / imposta la
allineamento orizzontale del genitore contenuti - A capo: ottiene / imposta se
involucri di contenuto del pannello
C'è un buon articolo su startvbnet qui .
PlaceHolder control
Utilizzare il controllo PlaceHolder come contenitore per archiviare i controlli server aggiunti dinamicamente alla pagina Web. Il controllo PlaceHolder non produce alcun output visibile e viene utilizzato solo come contenitore per altri controlli nella pagina Web. Puoi utilizzare la raccolta Control.Controls
per aggiungere, inserire o rimuovere un controllo nel controllo PlaceHolder.
Controllo pannello
Il controllo pannello è un contenitore per altri controlli . È particolarmente utile quando si desidera generare controlli a livello di codice, nascondere / mostrare un gruppo di controlli o localizzare un gruppo di controlli.
La proprietà Direction
è utile per localizzare il contenuto di un controllo Panel per visualizzare il testo per le lingue scritte da destra a sinistra, come l'arabo o l'ebraico.
Il controllo Pannello offre diverse proprietà che ti consentono di personalizzare il comportamento e la visualizzazione dei suoi contenuti. Utilizzare la proprietà BackImageUr
l per visualizzare un'immagine personalizzata per il controllo Panel. Utilizzare la proprietà ScrollBars
per specificare le barre di scorrimento per il controllo.
Piccole differenze nel rendering HTML: un controllo PlaceHolder non visualizzerà nulla, ma il controllo Panel verrà visualizzato come <div>
.
Ulteriori informazioni su Forum ASP.NET
I bizzarri bug * in Visual Studio 2010, se si inseriscono i controlli all'interno di un segnaposto, questi non li rendono in modalità di visualizzazione di progettazione.
Ciò è particolarmente vero per le etichette Hidenfields e Empty.
Mi piacerebbe usare i segnaposto anziché i pannelli, ma odio il fatto di non poter inserire altri controlli all'interno dei segnaposto in fase di progettazione nella GUI.
Come menzionato in altre risposte, il Pannello genera un <div>
in HTML, mentre PlaceHolder no. Ma ci sono molte altre ragioni per cui puoi scegliere una delle due.
Perché un PlaceHolder?
Poiché non genera tag propri, è possibile utilizzarlo in modo sicuro all'interno di altri elementi che non possono contenere un DefaultButton
, ad esempio:
<table>
<tr>
<td>Row 1</td>
</tr>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>
Puoi anche utilizzare un PlaceHolder per controllare la visibilità di un gruppo di controlli senza racchiuderlo in un enter
<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>
Perché un pannello
Genera il proprio TextBox1
e può anche essere usato per avvolgere un gruppo di controlli. Ma un pannello ha molte più proprietà che possono essere utili per formattare il suo contenuto:
<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>
Ma la caratteristica più utile è la proprietà <=>. Quando l'ID corrisponde a un pulsante nel pannello, attiverà un post modulo con convalida quando <=> viene premuto all'interno di una casella di testo. Ora un utente può inviare il modulo senza premere il pulsante.
<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>
Prova lo snippet sopra premendo <=> dentro <=>