Qual è la differenza tra <asp:Panel >
e <asp:PlaceHolder >
in ASP.NET?
Quando dovresti usarne uno sopra l'altro?
Qual è la differenza tra <asp:Panel >
e <asp:PlaceHolder >
in ASP.NET?
Quando dovresti usarne uno sopra l'altro?
Risposte:
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.
Il segnaposto non esegue il rendering di tag per se stesso, quindi è ottimo per raggruppare il contenuto senza l'overhead dei tag HTML esterni.
Il pannello ha tag HTML esterni ma ha alcune interessanti proprietà extra.
BackImageUrl: ottiene / imposta l'URL dell'immagine di sfondo per il pannello
HorizontalAlign: Ottiene / Imposta l'
allineamento orizzontale del contenuto del genitore
C'è un buon articolo su startvbnet qui .
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. È possibile utilizzare la Control.Controls
raccolta per aggiungere, inserire o rimuovere un controllo nel controllo PlaceHolder.
Il pannello di controllo è 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 Direction
proprietà è 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 del pannello fornisce diverse proprietà che consentono di personalizzare il comportamento e la visualizzazione dei suoi contenuti. Utilizzare la BackImageUr
proprietà l per visualizzare un'immagine personalizzata per il controllo Panel. Utilizzare la ScrollBars
proprietà per specificare le barre di scorrimento per il controllo.
Piccole differenze durante il rendering HTML: un controllo PlaceHolder non renderà nulla, ma il controllo Panel verrà visualizzato come <div>
.
Maggiori informazioni sui forum ASP.NET
I bizzarro bug * in Visual Studio 2010, se si inseriscono i controlli in un segnaposto, questi non li rendono in modalità visualizzazione struttura.
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 <div>
, 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 a <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>
Perché un pannello
Genera il proprio <div>
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 DefaultButton
proprietà. Quando l'ID corrisponde a un pulsante nel pannello, attiverà un post modulo con convalida quando enter
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 enter
all'internoTextBox1